EXECUTE IMMEDIATE 中的确切错误行号
Posted
技术标签:
【中文标题】EXECUTE IMMEDIATE 中的确切错误行号【英文标题】:Exact error line number in EXECUTE IMMEDIATE 【发布时间】:2012-03-13 22:41:11 【问题描述】:以下是我的代码中的过程:
PROCEDURE OutputShipTo (MonRec IN OUT meta_imi_monitor%ROWTYPE,
CustomerChangesRec IN CustomerChanges%ROWTYPE,
InType In CHAR)
IS
BEGIN
EXECUTE IMMEDIATE sql_stmt_loc_insert USING 'ZMSH', 'ZMSH',
CustomerChangesRec.cab_id,CustomerChangesRec.tab_id,'ZMSH';
END;
执行此过程时,我收到以下错误:
ERROR at line 1:
ORA-00904: invalid column name
ORA-06512: at line 601
ORA-06512: at line 1114
它只是给我程序位置的错误行号以及调用它的位置。可能,DML 'sql_stmt_loc_insert' 中有一个无效列,但我无法弄清楚它在哪里。有什么办法,我可以从 DML stmt 'sql_stmt_loc_insert' 中找出确切的错误行号,以便我可以看到无效的列并更正它。
'sql_stmt_loc_insert'的代码,由于行数太多,无法给出。
谢谢!
【问题讨论】:
【参考方案1】:使用EXECUTE IMMEDIATE
接口,无法获得有关错误的更多细节。
通常,人们调试生成动态 SQL 的代码的方式是在调用 EXECUTE IMMEDIATE
之前打印出(到控制台或日志表)SQL 语句和绑定变量。然后,您可以交互地运行代码以获取有关错误的更多详细信息。
【讨论】:
非常感谢您提供的线索。我把我的 sql 代码放到了一个日志表中,然后我得到了有问题的列名。以上是关于EXECUTE IMMEDIATE 中的确切错误行号的主要内容,如果未能解决你的问题,请参考以下文章
在存储过程中对 DML 语句使用 EXECUTE IMMEDIATE
Oracle EXECUTE IMMEDIATE 未执行存储过程中的预期操作