我有一个以下的代码,从APEX调用生成响应有效载荷。当Web服务成功时,响应就出来了。没有问题。
但是,当响应有错误时,我无法使用PLSQL API显示错误及其完整描述。
但是,如果我使用相同的负载并通过POSTMAN或SOAPUI运行它,我会得到完整的错误。
如何从PLSQL中解析并接收完整的错误描述?
下面是我们讨论的代码片段:
l_resp := apex_web_service.make_rest_request(p_url => g_fusion_url,
p_credential_static_id => l_crd,
p_http_method => l_method, p_body => p_body);
DBMS_OUTPUT.PUT_LINE('STATUSCODE:'||apex_web_service.g_status_code);
IF apex_web_service.g_status_code >= 400 THEN
apex_debug.info('Request Body is %s', sys.dbms_lob.substr(l_resp, 4000, 1));
raise_application_error(-20001, 'API Error2: '
|| apex_web_service.g_status_code
|| '-'
|| sys.dbms_lob.substr(l_resp, 1, 531));--1.4
如果我通过SOAP UI运行Payload,你会看到,我们得到完整的描述
但SQL Developer或SQL Plus的相同API仅提供以下内容,这是不够的。
Error report -
ORA-20001: Error in Main:[Brkpoint:M01|-20004|ORA-20004: Error in apinvoices:ORA-20004: Error in Request_fusion:ORA-20001: API Error2: 400-
ORA-06512: at "PROCORE_WH_DATA.XXMOR_RR_BILLING_INVOICE_PROC", line 689
ORA-06512: at line 1]
ORA-06512: at "PROCORE_WH_DATA.XXMOR_RR_BILLING_INVOICE_PROC", line 52
ORA-06512: at line 4
请告诉我如何解决这个问题。我的要求是,我想捕获完整长度的错误消息,就像它在PLSQ调用中的SOAP UI中显示的那样。
感谢Darsh
1条答案
按热度按时间piv4azn71#
你的问题可能是SubStr()函数和dbms_lob.SubStr()函数中参数2和3的位置不同(交换位置)。
SubStr(char,position,length)
dbms_lob.SubStr(clob,amount,offset)
代码dbms_lob.substr(l_resp,1,531)的结果是在位置531处有1个字符
你可能需要的是 SubStr(l_resp,1,531),因为你已经有了4000个字符的l_resp字符串。
代码如下: