使用APEX WebService调用接口输出响应时遇ORA-06502错误求助
解决ORA-06502错误并正确输出REST接口响应
错误原因
DBMS_OUTPUT.PUT_LINE仅支持VARCHAR2类型参数,最大长度为32767字节。当APEX_WEB_SERVICE.MAKE_REST_REQUEST返回的CLOB内容超过这个长度时,就会触发ORA-06502数值/值错误。
解决方案
编写一个自定义过程,分段读取并输出CLOB内容,避免单次输出超长字符串。
修改后的完整代码
DECLARE j_string CLOB; -- 自定义分段输出CLOB的过程 PROCEDURE print_clob(p_clob CLOB) IS v_offset NUMBER := 1; v_chunk_size NUMBER := 32000; -- 每次输出的字节数,小于VARCHAR2最大长度 v_length NUMBER; v_chunk VARCHAR2(32767); BEGIN v_length := DBMS_LOB.GETLENGTH(p_clob); WHILE v_offset <= v_length LOOP v_chunk := DBMS_LOB.SUBSTR(p_clob, v_chunk_size, v_offset); DBMS_OUTPUT.PUT_LINE(v_chunk); v_offset := v_offset + v_chunk_size; END LOOP; END print_clob; BEGIN j_string := APEX_WEB_SERVICE.MAKE_REST_REQUEST( p_url => 'http://localhost/api/public/certificate', -- 修正拼写错误:cerificate → certificate p_http_method => 'POST', p_body => '{ "name": "Jonh West", "gender": "Male", "dob": "sep-02-1977", "occupation": "Trader", "address": "NO 33 Mudupe Street Ikeja Lagos", "mobile": "08131500000", "email": "johnwest@john.com", "kinName": "James West", "kinMobile": "08145600000", "kinEmail": "west2@western.com", "coverPlan": "BRONZE", "coverMedical": "20000", "coverPDisability": "30000", "coverTDisability": "15000", "coverDeath": "44000", "aPremiuum": "80000" }' ); -- 调用自定义过程输出CLOB print_clob(j_string); END; /
额外提示
- 修正了URL中的拼写错误
cerificate为certificate,避免因地址错误导致请求失败。 - 若接口返回的CLOB内容较小(不超过32767字节),也可直接转换为VARCHAR2输出,但分段输出的方式兼容性更强,适用于所有长度的CLOB响应。
内容的提问来源于stack exchange,提问作者Efam
相关产品推荐
相关产品推荐

