Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PLSQL-获取发生异常的行_Sql_Xml_Oracle_Plsql - Fatal编程技术网

PLSQL-获取发生异常的行

PLSQL-获取发生异常的行,sql,xml,oracle,plsql,Sql,Xml,Oracle,Plsql,是否可以捕获发生异常的行 给定以下PL/SQL块: l_path1_value := l_xmltype.extract('/SOME_PATH1').getStringVal(); l_path2_value := l_xmltype.extract('/SOME_PATH2').getStringVal(); l_path3_value := l_xmltype.extract('/SOME_PATH3').getStringVal(); 当extract函数返回null时,将抛出SELF

是否可以捕获发生异常的行

给定以下PL/SQL块:

l_path1_value := l_xmltype.extract('/SOME_PATH1').getStringVal();
l_path2_value := l_xmltype.extract('/SOME_PATH2').getStringVal();
l_path3_value := l_xmltype.extract('/SOME_PATH3').getStringVal();
extract
函数返回
null
时,将抛出
SELF\u IS\u null
异常。抛出错误时是否可能获取错误行

WHEN SELF_IS_NULL THEN
    --get error line and save it somewhere

尝试为
extract
函数创建包装函数,并定义
异常SELF\u IS\u NULL
并使用
RAISE SELF\u IS\u NULL如果它返回NULL

dbms_output.put_line(SQLERRM | | | chr(10)| | dbms_utility.format_error_backtrace)


请把这个放在你的异常块中。它打印堆栈跟踪的起始位置(行号)

实现这一点的一种方法是使用检查点变量,类似于以下内容:

BEGIN
  strXMLelement := '/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/QUANTITY/VALUE/text()';
  l_XMLvalue := l_xmltype.extract(strXMLelement ).getStringVal();
  dbms_output.put_line('QUANTITY: '||l_XMLvalue);

  strXMLelement := '/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID/text()';
  l_XMLdocument_id := l_xmltype.extract(strXMLelement ).getStringVal();
  dbms_output.put_line('DOCUMENT ID:' ||l_XMLdocument_id);

  strXMLelement := '/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/USERAREA/DOCUMENTRELEASE/text()';
  l_XMLdoc_release := l_xmltype.extract(strXMLelement).getStringVal();
  dbms_output.put_line('DOCUMENT RELEASE:' ||l_XMLdoc_release);

  strXMLelement := '/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/LINENUM/text()';
  l_XMLlinenum := l_xmltype.extract(strXMLelement).getStringVal();
  dbms_output.put_line('LINE NUMBER:' ||l_XMLlinenum);

  strXMLelement := '/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/SCHLINENUM/text()';
  l_XMLsch_lnum := l_xmltype.extract(strXMLelement).getStringVal();
  dbms_output.put_line('SCHIPMENT LINE NUMBER:' ||l_XMLsch_lnum);
EXCEPTION
  WHEN SELF_IS_NULL THEN
    DBMS_OUTPUT.PUT_LINE('Error extracting ' || strXMLelement || ' : ' ||
                         'SQLCODE=' || SQLCODE || '  SQLERRM=' || SQLERRM);
END;
分享和享受