在对执行立即和错误处理的各种问题进行了大约两个小时的研究之后,我认为我没有遇到我即将提出的问题。我已将我的问题简化为下面的示例。问题是:
当我使用变量中的创建文本和创建文本中的语法错误以立即模式执行过程创建时,执行立即调用会引发错误,指示它失败。但我无法理解潜在的错误或其文本。
但是,当我直接在 sqlplus(无中间模式)中创建相同的 proc 时,得到错误的效果很好。
那么,如何解决导致立即模式失败的错误呢?
我在输出中穿插了我的评论 (MOP) 并减少了空白行的数量:
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 25 15:57:06 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> set serveroutput on
SQL> declare
2 eSQL varchar(568);
3 begin
4 eSQL := 'create or replace procedure MOPMOP
5 as
6 begin
7 select 1 from dual;
8 end;
9 ';
10 execute immediate eSQL;
11 end;
12 /
ERROR:
ORA-24344: success with compilation error
ORA-06512: at line 10
Warning: PL/SQL compilation errors.
这很好。有编译错误。所以,现在让我问一下那个编译错误是什么:
SQL> show errors;
No errors.
这不好。有编译错误。它以前如何!?!?!?与之对比:
SQL> create or replace procedure MOPMOP
2 as
3 begin
4 select 1 from dual;
5 end;
6 /
Warning: Procedure created with compilation errors.
这很好。有编译错误。所以,现在让我问一下那个编译错误是什么:
SQL> show errors;
Errors for PROCEDURE MOPMOP:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/5 PLS-00428: an INTO clause is expected in this SELECT statement
SQL>
这很好。有编译错误。现在我知道是什么了。
那么,如何让中间模式吐出潜在的(00428)错误?