当我使用政府许可的Google API密钥时,我遇到了从Google获取地理编码的问题。该项目是为政府开发的,因此我们应该能够使用此API密钥。政府经纪人告诉我,只要我使用这个API密钥并将他们公司的域名添加到他们的列表中,我们应该能够在没有Google免费限制的情况下获得地理编码。我使用的是Oracle 11gR2,Apex 4.1。 google确实返回了一些结果(1600个geocodings),过了一段时间我的程序有异常。但是,我遇到了以下问题:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1722
ORA-29259: end-of-input reached
ORA-06512: at "SORS.SOR_TEST_SERVICE", line 24
ORA-06512: at "SORS.SOR_TEST_SERVICE", line 187
ORA-06512: at line 6
29273. 00000 - "HTTP request failed"
*Cause: The UTL_HTTP package failed to execute the HTTP request.
*Action: Use get_detailed_sqlerrm to check the detailed error message.
Fix the error and retry the HTTP request.
我在线搜索并在OTN上找到以下帖子:
https://forums.oracle.com/forums/thread.jspa?threadID=2253491
看起来我需要获得Google API证书并将其安装在Oracle钱包上。我对此没有任何经验。任何人都可以给我一个关于它的路线图吗?例如,我如何获得Google证书?我应该与Google联系,还是发送带有许可API密钥的请求?或API密钥是证书?一个例子非常有帮助!
这是我的代码
procedure Get_Geocoding(P_s_Address in varchar2, P_s_Geocoding out varchar2, P_n_accuracy out number, P_b_success out boolean) is
l_address varchar2(4000);
l_url varchar2(32000);
l_response varchar2(3200);
n_first_comma number;
n_second_comma number;
n_level_length number;
BEGIN
/* TODO implementation required */
l_address:=APEX_UTIL.URL_ENCODE(P_s_Address);
l_address := replace(l_address,' ','+');
l_url := 'http://maps.google.com/maps/geo?q='||l_address||'&'||'output=csv'||'&'||'key=my API key';
l_response := utl_http.request(l_url, APEX_APPLICATION.G_PROXY_SERVER);
n_first_comma:=instr(l_response,',',1,1);
n_second_comma:=instr(l_response,',',1,2);
n_level_length:=n_second_comma-n_first_comma-1;
P_n_accuracy:=to_number(substr(l_response,n_first_comma+1, n_level_length));
l_response:=substr(l_response,instr(l_response,',',1,2)+1);
P_s_Geocoding:=l_response;
if (P_s_Geocoding<>'0,0') then
P_b_success:=true;
else
P_b_success:=false;
end if;
END;
}
非常感谢!
萨姆
答案 0 :(得分:0)
如果db版本是11.2.0.3或更低版本,请检查db版本,可能会出现此错误。 您需要安装补丁以升级基于安全性。最低版本为11.2.0.4.0。 Oracle为Windows提供了一个补丁(19651773)来升级版本。