我有以下代码,可从 APEX 调用生成响应有效负载。当网络服务成功时,响应就会很好。没问题。
但是,当响应有错误时,我无法使用 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 运行有效负载,您会看到,我们得到完整的描述
但是 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 中显示的那样。
谢谢你 达什
您的问题可能是 SubStr() 与 dbms_lob.SubStr() 函数中参数 2 和 3 的位置不同(交换位置)。
SubStr(字符、位置、长度)
dbms_lob.SubStr(clob,金额,偏移量)
您的代码 dbms_lob.substr(l_resp, 1, 531) 结果在位置 531 处有 1 个字符
请看下面的代码:
SET SERVEROUTPUT ON
Declare
my_text_varchar VarChar2(10) := '0123456789';
my_text_clob CLOB := '0123456789';
Begin
dbms_output.put_line('SubStr(my_text_varchar, 1, 10) --->' || SubStr(my_text_varchar, 1, 10));
dbms_output.put_line('dbms_lob.SubStr(my_text_clob, 1, 10): --->' || dbms_lob.SubStr(my_text_clob, 1, 10));
--
dbms_output.put_line('dbms_lob.SubStr(my_text_clob, 10, 1): --->' || dbms_lob.SubStr(my_text_clob, 10, 1));
End;
/
-- R e s u l t :
-- SubStr(my_text_varchar, 1, 10) --->0123456789
-- dbms_lob.SubStr(my_text_clob, 1, 10): --->9
-- dbms_lob.SubStr(my_text_clob, 10, 1): --->0123456789