Oracle APEX中apex_web_service.make_rest_request无法添加查询参数
解决方法
方法1:通过p_parm_name和p_parm_value传递所有查询参数
把原URL中的filter参数也纳入参数列表,而非直接写在p_url中,这样所有参数会被自动正确拼接和编码:
declare l_clob clob; begin l_clob := apex_web_service.make_rest_request( p_url => 'http://myurl.mycompany.net/api/people', p_http_method => 'GET', p_parm_name => apex_util.string_to_table('filter,appid,attrs'), p_parm_value => apex_util.string_to_table('(cn=kxxxxx),GPVC,sn,displayName') ); DBMS_OUTPUT.put_line(l_clob); end;
方法2:手动拼接URL时规避&触发绑定变量提示
若必须手动拼接URL,用chr(38)替代&(chr(38)是ASCII码对应的&字符),避免PL/SQL将其识别为绑定变量前缀:
declare l_clob clob; l_url varchar2(1000); begin l_url := 'http://myurl.mycompany.net/api/people?filter=(cn=kxxxxx)' || chr(38) || 'appid=GPVC' || chr(38) || 'attrs=sn,displayName'; l_clob := apex_web_service.make_rest_request( p_url => l_url, p_http_method => 'GET' ); DBMS_OUTPUT.put_line(l_clob); end;
方法3:用apex_util.url_encode确保参数编码正确
如果参数包含特殊字符(如括号、逗号),建议对参数值编码,避免接口解析错误:
declare l_clob clob; l_filter varchar2(100) := apex_util.url_encode('(cn=kxxxxx)'); l_attrs varchar2(100) := apex_util.url_encode('sn,displayName'); l_url varchar2(1000); begin l_url := 'http://myurl.mycompany.net/api/people?filter=' || l_filter || chr(38) || 'appid=GPVC' || chr(38) || 'attrs=' || l_attrs; l_clob := apex_web_service.make_rest_request( p_url => l_url, p_http_method => 'GET' ); DBMS_OUTPUT.put_line(l_clob); end;
原代码参数传递失败原因
原代码将filter参数直接写在p_url中,再用p_parm_name传递appid,部分环境下apex_web_service.make_rest_request无法正确拼接已有查询参数的URL,将所有参数统一放入p_parm_name/p_parm_value列表是更可靠的方案。
内容的提问来源于stack exchange,提问作者smackenzie
相关产品推荐
相关产品推荐

