Oracle   发布时间:2022-05-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Oracle:使用SQL或PL/SQL在动态SQL中查找错误的位置大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在PL / sql或sql中的动态sql语句中找到错误的位置?

从sql * Plus我看到错误的位置,例如,无效的sql DML语句:

SYS@orcl> SELECT
       2    X
       3  FROM
       4    tableX
       5  /
  tableX
  *
ERROR at line 4:
ORA-00942: table or vIEw does not exist

sql * Plus使用行号显示错误,并打印和标记与发现错误的星号对齐.

转换为动态sql,我可以得到错误代码(sqlCODE)错误消息(sqlERRM):

SYS@orcl> SET SERVEROUTPUT ON
SYS@orcl> BEGIN
       2    EXECUTE IMMEDIATE 'SELECT X FROM tableX';
       3  EXCEPTION
       4    WHEN OTHERS THEN
       5      DBMS_OUTPUT.PUT_liNE('sqlCODE:' || sqlCODE);
       6      DBMS_OUTPUT.PUT_liNE('sqlERRM:' || sqlERRM);
       7  END;
       8  /
sqlCODE:-942
sqlERRM:ORA-00942: table or vIEw does not exist

但是如何在动态sql字符串中获取错误的位置?

我看到Oracle提供了一个sql通信区域(sqlCA),其中包含有关错误的有趣信息.特别是:

> sqlCODE和sqlERRM字段(可能是使用相应PL / sql函数检索的数据的来源),
> sqlErrd字段,其中sqlErrd(5)元素给出’解析错误偏移’.

是否可以从PL / sql或sql访问sqlErrd?如果是这样,怎么样?如果没有,还有哪种技术可以从PL / sql或sql中提供错误的位置?

(这里http://docs.Oracle.com/cd/B28359_01/appdev.111/b31231/chapter8.htm#BABIGBFF sqlCA已记录并使用Pro * C进行访问.)

(这里的答案how to declare SQLCA.SQLErrd?似乎表明sqlErrd没有在PL / sql中定义,因此无法访问.)

(这里的讨论Why doesn’t Oracle tell you wHICH table or view does not exist?给出了一些建议,用于显示使用跟踪文件的错误sql并在一些开发工具中显示错误的位置.)

你有一个用于在 DBMS_utility中提取错误消息的包
begin 
    .. generate error
exception when others then 
    DBMS_output.put_line(
        DBMS_utility.format_call_stack()      || chr(10) || 
        DBMS_utility.format_error_BACktrace() || chr(10) || 
        DBMS_utility.format_error_stack())
end;

大佬总结

以上是大佬教程为你收集整理的Oracle:使用SQL或PL/SQL在动态SQL中查找错误的位置全部内容,希望文章能够帮你解决Oracle:使用SQL或PL/SQL在动态SQL中查找错误的位置所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:例如