google maps api的PL/SQL函数Json解析错误
我正在尝试创建一个函数,该函数接受邮政编码,调用google api,然后对其进行解析,并返回sdo_几何体(经度和纬度),无论我如何无法使该函数工作,也不确定我在哪里出错,我在发布后确实犯了一个错误,但更正后我仍然得到一个解析错误 对其他方法的任何帮助或建议都将非常有用。我也不知道为什么我会被否决,但我希望我能google maps api的PL/SQL函数Json解析错误,sql,json,function,plsql,google-api,Sql,Json,Function,Plsql,Google Api,我正在尝试创建一个函数,该函数接受邮政编码,调用google api,然后对其进行解析,并返回sdo_几何体(经度和纬度),无论我如何无法使该函数工作,也不确定我在哪里出错,我在发布后确实犯了一个错误,但更正后我仍然得到一个解析错误 对其他方法的任何帮助或建议都将非常有用。我也不知道为什么我会被否决,但我希望我能 CREATE OR REPLACE FUNCTION google_geocode( p_postcode varchar2 ) RETURN sdo_geometry IS l_
CREATE OR REPLACE FUNCTION google_geocode( p_postcode varchar2 )
RETURN sdo_geometry IS
l_http_req utl_http.req;
l_http_response UTL_HTTP.resp;
l_lat long;
l_long long;
BEGIN
l_http_req := utl_http.begin_request(
url => 'https://maps.googleapis.com/maps/api/geocode/json?address=' || utl_url.escape(p_postcode));
l_http_response := UTL_HTTP.get_response(l_http_req);
apex_json.parse (l_http_response);
--DBMS_OUTPUT.PUT_LINE(apex_json.get_number('results.location.lat'));
--DBMS_OUTPUT.PUT_LINE(apex_json.get_number('results.location.lng'));
l_lat := apex_json.get_number('results.location.lat');
l_long := apex_json.get_number('results.location.lng');
RETURN sdo_geometry
(
2001,
4326,
sdo_point_type(
TO_NUMBER(l_lat),
TO_NUMBER(l_long),
null),
null,
null);
END google_geocode;
我得到的错误是,我修复了前两个,但仍然得到解析错误您需要更改变量名:
l_http_req := utl_http.begin_request(
url => 'https://maps.googleapis.com/maps/api/geocode/json?address='
|| utl_url.escape(p_postcode));
l_http_response := UTL_HTTP.get_response(l_http_request);
-- should be l_http_req
您得到的错误是,没有与您试图传递的参数匹配的
apex_json.parse
定义
如果查看,您将看到有四个签名用于parse
:
APEX_JSON.PARSE (
p_values in out nocopy t_values,
p_source in varchar2,
p_strict in boolean default true );
APEX_JSON.PARSE (
p_values in out nocopy t_values,
p_source in clob,
p_strict in boolean default true );
APEX_JSON.PARSE (
p_source IN VARCHAR2,
p_strict IN BOOLEAN DEFAULT TRUE );
APEX_JSON.PARSE (
p_source IN CLOB,
p_strict IN BOOLEAN DEFAULT TRUE );
目前您正在提供一个utl_http.resp
,但不支持这种调用
您需要将
utl\u http.resp
对象中的数据读取到CLOB
中,然后将其传递到parse
过程。您好,我想您还没有进一步的了解,我还需要在这方面取得进展