在 PL/SQL 中通过 Webservice 处理 JSON 对象
Processing JSON object via Webservice in PL/SQL
我正在开发一个测试 Oracle 过程以从本地 XAMPP 托管的 Web 服务接收 JSON 对象。按照以下步骤操作。
(01) 创建了 ACL
set define off;
BEGIN
SYS.DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'www.xml',
description => 'TEST JSON',
principal => 'TEST_USER',
is_grant => true,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
SYS.DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'www.xml',
principal => 'TEST_USER',
is_grant => true,
privilege => 'resolve');
SYS.DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'www.xml',
host => 'localhost',
lower_port => 8081,
upper_port => NULL);
END;
(02) 以下是测试过程
create or replace PROCEDURE JSON11 IS
l_param_list VARCHAR2(512);
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_response_text VARCHAR2(32767);
l_list system.json_list;
acl VARCHAR2(100);
url VARCHAR2(1000) :=
'http://localhost:8081/PhpProjectFirst/displayValuesSent.php?
name=name11&email=name11@gmail.com&gender=male&course=OCA2&class=2008&s
ubject=PL/SQL';
BEGIN
DBMS_OUTPUT.put_line('start');
l_http_request := utl_http.begin_request(url, 'POST','HTTP/1.1');
DBMS_OUTPUT.put_line('aa');
--utl_http.set_header(l_http_request, 'user-agent', 'mozilla/4.0');
utl_http.set_header(l_http_request, 'Content-Type', 'application/json');
--utl_http.set_header(l_http_request, 'Content-Length',
length(content));
--utl_http.write_text(l_http_request, content);
DBMS_OUTPUT.put_line('bb');
l_http_response := utl_http.get_response(l_http_request);
DBMS_OUTPUT.put_line('cc');
-- process the response from the HTTP call
begin
loop
utl_http.read_line(l_http_response, l_response_text);
dbms_output.put_line(l_response_text);
end loop;
utl_http.end_response(l_http_response);
end;
exception
when utl_http.end_of_body then
utl_http.end_response(l_http_response);
when others then
DBMS_OUTPUT.put_line('Error >> '||sqlerrm);
END JSON11;
(03) 调用了过程
set serveroutput on size 30000;
BEGIN
JSON11();
END;
但以以下错误结束。
Error >> ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-29270: too many open HTTP requests
DB 是 Oracle XE 并使用 Oracle SQL Developer。
Webservice 非常简单,运行 通过 XAMPP 和 returns 一个简单的 JSON 对象。
可以分享任何提示吗?
此致,
LM
每个会话最多可以有 5 个 HTTP 请求。
对于该过程的每个 运行,您都在创建一个新连接,但并不总是关闭它。
您仅在 when utl_http.end_of_body then
中关闭您的连接,但您也应该在 when others then
中关闭它。
我正在开发一个测试 Oracle 过程以从本地 XAMPP 托管的 Web 服务接收 JSON 对象。按照以下步骤操作。
(01) 创建了 ACL
set define off;
BEGIN
SYS.DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'www.xml',
description => 'TEST JSON',
principal => 'TEST_USER',
is_grant => true,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
SYS.DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'www.xml',
principal => 'TEST_USER',
is_grant => true,
privilege => 'resolve');
SYS.DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'www.xml',
host => 'localhost',
lower_port => 8081,
upper_port => NULL);
END;
(02) 以下是测试过程
create or replace PROCEDURE JSON11 IS
l_param_list VARCHAR2(512);
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_response_text VARCHAR2(32767);
l_list system.json_list;
acl VARCHAR2(100);
url VARCHAR2(1000) :=
'http://localhost:8081/PhpProjectFirst/displayValuesSent.php?
name=name11&email=name11@gmail.com&gender=male&course=OCA2&class=2008&s
ubject=PL/SQL';
BEGIN
DBMS_OUTPUT.put_line('start');
l_http_request := utl_http.begin_request(url, 'POST','HTTP/1.1');
DBMS_OUTPUT.put_line('aa');
--utl_http.set_header(l_http_request, 'user-agent', 'mozilla/4.0');
utl_http.set_header(l_http_request, 'Content-Type', 'application/json');
--utl_http.set_header(l_http_request, 'Content-Length',
length(content));
--utl_http.write_text(l_http_request, content);
DBMS_OUTPUT.put_line('bb');
l_http_response := utl_http.get_response(l_http_request);
DBMS_OUTPUT.put_line('cc');
-- process the response from the HTTP call
begin
loop
utl_http.read_line(l_http_response, l_response_text);
dbms_output.put_line(l_response_text);
end loop;
utl_http.end_response(l_http_response);
end;
exception
when utl_http.end_of_body then
utl_http.end_response(l_http_response);
when others then
DBMS_OUTPUT.put_line('Error >> '||sqlerrm);
END JSON11;
(03) 调用了过程
set serveroutput on size 30000;
BEGIN
JSON11();
END;
但以以下错误结束。
Error >> ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-29270: too many open HTTP requests
DB 是 Oracle XE 并使用 Oracle SQL Developer。 Webservice 非常简单,运行 通过 XAMPP 和 returns 一个简单的 JSON 对象。
可以分享任何提示吗?
此致, LM
每个会话最多可以有 5 个 HTTP 请求。
对于该过程的每个 运行,您都在创建一个新连接,但并不总是关闭它。
您仅在 when utl_http.end_of_body then
中关闭您的连接,但您也应该在 when others then
中关闭它。