如何 post JSON 使用 Oracle Rest 数据服务
How to post JSON using Oracle Rest Data Services
我正在使用 Oracle 常规数据库(不像 NoSQL 之类的)和 Oracle 休息数据服务。我需要知道如何使用 pl/sql 获取 HTTP 消息正文。例如,
通过oracle rest数据服务向oracle application express发送json对象,在application express内部暴露消息体并获取json结构化的内容并一一获取字段。
我删除了我之前的post。您可以将 body 作为 BLOB 并转换为要使用的字符,但至少在 apex.oracle.com 的 Application Express 托管实例的 4.2 版本中我得到了它以使用自动 JSON值绑定。
Begin
htp.p('JSON ename = ' || :ename);
htp.p('JSON dept = ' || :dept);
insert into emp(ename, deptno)
values (:ename, :dept);
htp.p('Rows Inserted = ' || sql%rowcount);
end;
您可以通过 post 像这样测试它:
{ "ename": "Seema", "dept": 10}
演示地址:https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/
确保 Content-Type header 设置为 application/json
更新:这是一个有效的 windows curl 命令
curl --header "Content-type: application/json" --request POST --data-ascii "{\"ename\":\"hello\",\"dept\" :\"10\"}" https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/
如果您安装了 4 月 15 日发布的最新 APEX 5.0。您可以使用很棒的 API 与 JSON
一起工作
我在 11.2 上使用它,并且已经能够处理每个 json,从简单到非常复杂的 object,具有多个数组和 4/5 级别。 APEX_JSON
如果您不想使用 APEX。只需安装运行时环境即可访问 API.
接受非常复杂 JSON object 的(实际)POST 方法示例。具有多个 object 和 sub-arrays 3-5 层深的数组。
我把整个 body 送到一个包裹中进行处理。 (:body)。 :apikey 带有 header (此处不适用)。
:body 是 blob,因此如果您的数据库不是 UTF8,则您的包需要将其转换为 clob 并进行任何字符集转换。
之后,您将 clob 解析为 json。
apex_json.parse (p_source => l_clob);
在我的例子中,初始 object 是一个数组,所以我用
遍历所有项目
for i in 1 .. nvl (apex_json.get_count (p_path => '.'), 0) loop
查找 varchar2 值的示例
l_app.medication_description := apex_json.get_varchar2 ('[%d].regularMedicationDetails', i);
其中 "i" 引用数组中的第 n 个 object,
作为一名经验丰富的 PL/SQL 程序员,这种设置让我进入了现代网络驱动的世界。
我正在使用 Oracle 常规数据库(不像 NoSQL 之类的)和 Oracle 休息数据服务。我需要知道如何使用 pl/sql 获取 HTTP 消息正文。例如,
通过oracle rest数据服务向oracle application express发送json对象,在application express内部暴露消息体并获取json结构化的内容并一一获取字段。
我删除了我之前的post。您可以将 body 作为 BLOB 并转换为要使用的字符,但至少在 apex.oracle.com 的 Application Express 托管实例的 4.2 版本中我得到了它以使用自动 JSON值绑定。
Begin
htp.p('JSON ename = ' || :ename);
htp.p('JSON dept = ' || :dept);
insert into emp(ename, deptno)
values (:ename, :dept);
htp.p('Rows Inserted = ' || sql%rowcount);
end;
您可以通过 post 像这样测试它:
{ "ename": "Seema", "dept": 10}
演示地址:https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/
确保 Content-Type header 设置为 application/json
更新:这是一个有效的 windows curl 命令 curl --header "Content-type: application/json" --request POST --data-ascii "{\"ename\":\"hello\",\"dept\" :\"10\"}" https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/
如果您安装了 4 月 15 日发布的最新 APEX 5.0。您可以使用很棒的 API 与 JSON
一起工作我在 11.2 上使用它,并且已经能够处理每个 json,从简单到非常复杂的 object,具有多个数组和 4/5 级别。 APEX_JSON
如果您不想使用 APEX。只需安装运行时环境即可访问 API.
接受非常复杂 JSON object 的(实际)POST 方法示例。具有多个 object 和 sub-arrays 3-5 层深的数组。
我把整个 body 送到一个包裹中进行处理。 (:body)。 :apikey 带有 header (此处不适用)。
:body 是 blob,因此如果您的数据库不是 UTF8,则您的包需要将其转换为 clob 并进行任何字符集转换。
之后,您将 clob 解析为 json。
apex_json.parse (p_source => l_clob);
在我的例子中,初始 object 是一个数组,所以我用
遍历所有项目for i in 1 .. nvl (apex_json.get_count (p_path => '.'), 0) loop
查找 varchar2 值的示例
l_app.medication_description := apex_json.get_varchar2 ('[%d].regularMedicationDetails', i);
其中 "i" 引用数组中的第 n 个 object,
作为一名经验丰富的 PL/SQL 程序员,这种设置让我进入了现代网络驱动的世界。