【发布时间】:2011-06-09 14:59:48
【问题描述】:
我是 PL/SQL 的新手(尤其是使用动态 SQL),我创建了这个函数,它运行/编译时没有任何错误或警告,但是当我运行该函数时......
SELECT schema.fa_awd_for_term('0000000','2003SPRING',NULL,NULL)
FROM DUAL;
....它抛出一个异常
【问题讨论】:
标签: sql exception plsql dynamic-sql
我是 PL/SQL 的新手(尤其是使用动态 SQL),我创建了这个函数,它运行/编译时没有任何错误或警告,但是当我运行该函数时......
SELECT schema.fa_awd_for_term('0000000','2003SPRING',NULL,NULL)
FROM DUAL;
....它抛出一个异常
【问题讨论】:
标签: sql exception plsql dynamic-sql
删除 EXCEPTION 处理程序,您会发现错误实际上是什么。您不应显式处理意外异常。
最好使用绑定变量,例如改变这个:
|| 'substr(ta_xxxx_id,1,7) = ''sssssss'' '
|| 'and substr(ta_xxxx_id,instr(ta_xxxx_id,''*'',1,2)+1) = ''aaaa'' '
到
|| 'substr(ta_xxxx_id,1,7) = :sssssss '
|| 'and substr(ta_xxxx_id,instr(ta_xxxx_id,''*'',1,2)+1) = :aaaa '
然后在 OPEN 语句中添加一个 USING 子句:
OPEN CUR_faawards FOR thequery USING id, v_year;
并删除这些的替换代码。恐怕你会因为糟糕的表格设计而被“xxxx”困住 - 每年都有一列?!?!
【讨论】: