如何 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 程序员,这种设置让我进入了现代网络驱动的世界。