Oracle Rest 数据服务 POST 使用 JSON
Oracle Rest Data Services POST using JSON
我在 application express(apex) 中使用 oracle rest 数据服务。
我需要知道如何 update/insert 数据库,使用 Json 格式的 http 请求。其实我需要知道的,
请求是来自 REST 客户端的 Json 格式请求,
{
"items" : [
{"PROJECTID" : 1},
{"PROJ_NAME" : "rest"},
{"PROJ_CLIENT" : "Sam"}
],
"hasMore" : false
}
如何 insert/update 顶点数据库,
begin
insert into projects(PROJECTID,PROJ_NAME,PROJ_CLIENT)
values (:PROJECTID,:PROJ_CLIENT,:PROJ_NAME);
commit;
end;
我找到了答案,这不容易做到。首先我们需要获取请求的主体。这可以使用 body (:body) 的绑定变量来完成。但是这个主体变量是 blob 数据类型。
blob_body BLOB := :body;
然后把这个转换成CLOB变量,
clob_variable CLOB := convert_to_clob(blob_body);
现在最简单的抽象方法是转换为 'varchar2' 并使用像 PL/JSON 这样的库来提取 json.
中的数据
更新至 apex 5.0。该版本附带了一个很棒的 json 库。
https://docs.oracle.com/cd/E59726_01/doc.50/e39149/apex_json.htm#AEAPI29635
适用于 11g 和 12c SE。我将它用于 ORDS 中非常复杂的 POST 数据。
让我们举个例子(请注意,它是一个非常奇怪的 json 对象,不会那样做):
declare
/* this would be :BODY */
l_json varchar2 (200) := '{
"items" : [
{"PROJECTID" : 1},
{"PROJ_NAME" : "rest"},
{"PROJ_CLIENT" : "Sam"}
],
"hasMore" : false
}';
begin
apex_json.parse (l_json); /* use :body on the rest service */
dbms_output.put_line (apex_json.get_number ('items[%d].PROJECTID', 1));
dbms_output.put_line (apex_json.get_varchar2 ('items[%d].PROJ_NAME', 2));
dbms_output.put_line (apex_json.get_varchar2 ('items[%d].PROJ_CLIENT', 3));
if apex_json.get_boolean ('hasMore') then
dbms_output.put_line ('True');
else
dbms_output.put_line ('False');
end if;
end;
==>
PL/SQL block executed
1
rest
Sam
False
我觉得json对象大概应该是这样的:
{
"items": [
{
"PROJECTID": 1,
"PROJ_NAME": "rest",
"PROJ_CLIENT": "Sam"
}
],
"hasMore": false
}
我在 application express(apex) 中使用 oracle rest 数据服务。 我需要知道如何 update/insert 数据库,使用 Json 格式的 http 请求。其实我需要知道的,
请求是来自 REST 客户端的 Json 格式请求,
{
"items" : [
{"PROJECTID" : 1},
{"PROJ_NAME" : "rest"},
{"PROJ_CLIENT" : "Sam"}
],
"hasMore" : false
}
如何 insert/update 顶点数据库,
begin
insert into projects(PROJECTID,PROJ_NAME,PROJ_CLIENT)
values (:PROJECTID,:PROJ_CLIENT,:PROJ_NAME);
commit;
end;
我找到了答案,这不容易做到。首先我们需要获取请求的主体。这可以使用 body (:body) 的绑定变量来完成。但是这个主体变量是 blob 数据类型。
blob_body BLOB := :body;
然后把这个转换成CLOB变量,
clob_variable CLOB := convert_to_clob(blob_body);
现在最简单的抽象方法是转换为 'varchar2' 并使用像 PL/JSON 这样的库来提取 json.
中的数据更新至 apex 5.0。该版本附带了一个很棒的 json 库。
https://docs.oracle.com/cd/E59726_01/doc.50/e39149/apex_json.htm#AEAPI29635
适用于 11g 和 12c SE。我将它用于 ORDS 中非常复杂的 POST 数据。
让我们举个例子(请注意,它是一个非常奇怪的 json 对象,不会那样做):
declare
/* this would be :BODY */
l_json varchar2 (200) := '{
"items" : [
{"PROJECTID" : 1},
{"PROJ_NAME" : "rest"},
{"PROJ_CLIENT" : "Sam"}
],
"hasMore" : false
}';
begin
apex_json.parse (l_json); /* use :body on the rest service */
dbms_output.put_line (apex_json.get_number ('items[%d].PROJECTID', 1));
dbms_output.put_line (apex_json.get_varchar2 ('items[%d].PROJ_NAME', 2));
dbms_output.put_line (apex_json.get_varchar2 ('items[%d].PROJ_CLIENT', 3));
if apex_json.get_boolean ('hasMore') then
dbms_output.put_line ('True');
else
dbms_output.put_line ('False');
end if;
end;
==>
PL/SQL block executed
1
rest
Sam
False
我觉得json对象大概应该是这样的:
{
"items": [
{
"PROJECTID": 1,
"PROJ_NAME": "rest",
"PROJ_CLIENT": "Sam"
}
],
"hasMore": false
}