帮助使用Dynamic PL/SQL,函数抛出异常
Posted
技术标签:
【中文标题】帮助使用Dynamic PL/SQL,函数抛出异常【英文标题】:Help using Dynamic PL/SQL, function throwing exception 【发布时间】:2011-06-09 14:59:48 【问题描述】:我是 PL/SQL 的新手(尤其是使用动态 SQL),我创建了这个函数,它运行/编译时没有任何错误或警告,但是当我运行该函数时......
SELECT schema.fa_awd_for_term('0000000','2003SPRING',NULL,NULL)
FROM DUAL;
....它抛出一个异常
【问题讨论】:
【参考方案1】:删除 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”困住 - 每年都有一列?!?!
【讨论】:
是的,我知道 :( 设计不佳。我会尝试这些建议,然后回复您。感谢您的提示。 好的,我尝试移动底部异常(它返回'ER2'),我得到一个ora-06512,未处理的异常,上面的错误是“表或视图不存在(我已经仔细检查了我的表名的准确性)这是否暗示了问题? 它可以是任何表,但我的怀疑将从 ta_xxxx 表开始。尝试添加一些调试消息,例如使用 dbms_output.put_line。 好吧,愚蠢的菜鸟问题。我可以使用 dbms_output.put_line();打印出一个变量?所以例如我可以做 dbms_output.put_line(v_year);并在函数运行时输出? 是的,但仅当在 SQL Plus、SQL Developer 或 Toad 等开发环境中运行该函数时。如果您从应用程序调用该函数,则无法轻松访问该函数的输出。一种常见的替代方法是使用自治事务将调试消息写入表 - 请参阅***.com/questions/1568166/…以上是关于帮助使用Dynamic PL/SQL,函数抛出异常的主要内容,如果未能解决你的问题,请参考以下文章