使用动态PL/SQL的帮助,函数引发异常

使用动态PL/SQL的帮助,函数引发异常,sql,exception,plsql,dynamic-sql,Sql,Exception,Plsql,Dynamic Sql,我对PL/SQL(特别是使用动态SQL)比较陌生,我创建了这个函数,它运行/编译时没有任何错误或警告,但是当我运行这个函数时 SELECT schema.fa_awd_for_term('0000000','2003SPRING',NULL,NULL) FROM DUAL; ..它抛出异常删除异常处理程序,您将发现错误的实际原因。您不应该显式处理意外异常 最好使用绑定变量,例如,更改以下内容: || 'substr(ta_xxxx_id,1,7) = ''sssssss'' '

我对PL/SQL(特别是使用动态SQL)比较陌生,我创建了这个函数,它运行/编译时没有任何错误或警告,但是当我运行这个函数时

SELECT schema.fa_awd_for_term('0000000','2003SPRING',NULL,NULL)
FROM DUAL;

..它抛出异常

删除异常处理程序,您将发现错误的实际原因。您不应该显式处理意外异常

最好使用绑定变量,例如,更改以下内容:

    || 'substr(ta_xxxx_id,1,7) = ''sssssss'' '
    || 'and substr(ta_xxxx_id,instr(ta_xxxx_id,''*'',1,2)+1) = ''aaaa'' '

然后将USING子句添加到OPEN语句中:

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等开发环境中运行函数时。如果从应用程序调用函数,则无法轻松访问该函数的输出。常见的替代方法是使用自治事务将调试消息写入表-请参阅
OPEN CUR_faawards FOR thequery USING id, v_year;