PLSQL-获取发生异常的行
是否可以捕获发生异常的行 给定以下PL/SQL块: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
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;
分享和享受