包含 sql 命令/语句的实际文本的变量



我在oracle pl sql中有一个脚本,其中包含许多sql命令(创建,插入...(,当某些命令抛出错误时,我异常地捕获它。
在我的例外中,我想显示命令的实际文本,我想知道是否有一个局部变量存储最后一个命令的文本,或者是否是一种将该文本存储在我创建的变量中的方法。
sql*plus 中的一种方法也可以提供帮助。
例如:

BEGIN
INSERT INTO suppliers
(supplier_id, supplier_name)
VALUES
(5000, 'Apple');
EXCEPTION
  WHEN OTHERS THEN
  print the variable that contains tha actual text of the sql command
END;

http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html

如上面的链接中所述,您应该使用DBMS_UTILITY.FORMAT_CALL_STACK

要打印它,您可以执行DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_CALL_STACK);

您可以使用 SQLERRM 函数执行以下操作:

 set serveroutput on;
 declare
 consumers_rec consumers%rowtype; 
 id_no number := 30; 
 begin
 select * into consumers_rec from consumers where CONSUMER_ID=id_no;
 dbms_output.put_line('CONSUMER_NAME' || consumers_rec.CONSUMER_NAME);
 EXCEPTION
 when no_data_found then
 dbms_output.put_line('When input is :' || id_no);
 dbms_output.put_line('ERROR MESSAGE:' || "SQLERRM" );
 dbms_output.put_line('SQLCODE:' || SQLCODE);
 end;
 /

您将看到如下所示的输出:

 anonymous block completed
 When input is :30
 ERROR MESSAGE:ORA-01403: no data found
 SQLCODE:100

最新更新