【问题标题】:PL/SQL Function Json parsing error with google maps apiPL/SQL 函数 Json 使用谷歌地图 api 解析错误
【发布时间】:2018-05-16 12:21:11
【问题描述】:

我正在尝试创建一个接受邮政编码的函数,调用 google api 然后对其进行解析并返回一个 sdo_geometry(经度和纬度),但是我无法让这个函数工作并且不确定我要去哪里错了,自发布以来我确实犯了一个错误,但更正了我仍然得到一个解析错误。

对其他方法的任何帮助或建议将非常有用。也不知道为什么我投了反对票,但我希望我能

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;

我得到的错误是,前两个我已经修复但仍然得到解析错误

【问题讨论】:

    标签: sql json function plsql google-api


    【解决方案1】:

    你需要更改变量名:

    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
    

    【讨论】:

    • 嗨,我不认为你有任何进一步的见解,我还没有在这方面取得进展
    【解决方案2】:

    您遇到的错误是没有与您尝试传递的参数匹配的 apex_json.parse 定义。

    如果你查看the documentation,你会看到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_http.resp 对象中的数据读入CLOB,然后将其传递给parse 过程。

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 2014-10-11
      • 2014-10-23
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多