EXECUTE IMMEDIATE中的确切错误行号

时间:2012-03-13 22:41:12

标签: oracle exception-handling plsql dynamic-sql

以下是我的代码中的程序:

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 个答案:

答案 0 :(得分:3)

使用EXECUTE IMMEDIATE界面,无法获得有关错误的更多细节。

通常,人们调试生成动态SQL的代码的方式是在调用EXECUTE IMMEDIATE之前打印(到控制台或日志表)SQL语句和绑定变量。然后,您可以以交互方式运行代码,以获得有关错误的更多细节。