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 中的确切错误行号的主要内容,如果未能解决你的问题,请参考以下文章

EXECUTE IMMEDIATE 插入多行列

execute immediate

在存储过程中对 DML 语句使用 EXECUTE IMMEDIATE

Oracle EXECUTE IMMEDIATE 未执行存储过程中的预期操作

EXECUTE IMMEDIATE 中的 SQL 语句是不是在运行时解析?

是否可以将 EXECUTE IMMEDIATE 和 USING 放入 Python 中的变量中