使用ORDS Rest API将JSON数据加载/插入到Apex表中

问题描述 投票:0回答:1

我需要通过ORDS Rest API将数据[JSON格式]加载到APEX表中。

所以,我在模块内创建了一个POST处理程序,下面是该处理程序的PL / SQL代码

PL / SQL

begin
insert into PEEP(USER_ID,NAME,AGE,PROFESSION,LOCATION) values (:val1,:val2,:val3,:val4,:val5);
end;

CURL命令:

curl -s -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"val1":"121","val2":"Rachel","val3":"37","val4":"Psychologist","val5":"Melbourne"}' https://xxxxx/ords/apex/peep/uploadinfo

上述方法的问题是它只通过一个API调用插入一行,如果我用-d给出多行,那么它只会插入第一行而忽略第二行/输入

示例

{“ user_id”:111,“名称”:“萨姆”,“年龄”:29,“专业”:“萨克斯管吹奏者”,“位置”:“悉尼”},{“用户名”:121,“名称” :“ Rachel”,“年龄”:37,“专业”:“心理学家”,“位置”:“墨尔本”}

我的要求是使用Curl命令将JSON文件作为输入或在curl命令中使用-d进行多个输入

有人可以帮我吗?

oracle oracle-apex oracle-apex-5
1个回答
0
投票

您的pl / sql主体仅接受一行,因此之后的所有内容都将被忽略。您需要使用:body引用整个有效负载,并使用oracle中的JSON_TABLE语法遍历整个有效负载。杰夫·史密斯(Jeff Smith)在这里写了一篇不错的文章:www.thatjeffsmith.com。他的代码中的示例并不完全相同,他使用的是单个复杂结构。根据您的情况,您需要遍历数据。

您必须使用json_table遍历元素并逐行处理元素。

  • 开始于在带有硬编码json的sqldeveloper中测试代码,类似于下面的示例。
  • 一旦您的sql语句在sqldeveloper中工作,请将其合并到rest处理程序的pl / sql主体中。将其放在for循环中,然后尝试插入行。测试/调试
  • 一旦工作,将硬编码的json替换为“:body”。测试/调试

如何将json转换为行的示例(使用emp表中的记录,出于测试目的,我仅取了2列,但您明白了这一点)

SELECT 
  empno,
  ename
FROM 
  JSON_TABLE('{"items":
[
{"empno":7839,"ename":"KING","job":"PRESIDENT","hiredate":"17-NOV-1981","sal":5000,"deptno":10}
,{"empno":7698,"ename":"BLAKE","job":"MANAGER","mgr":7839,"hiredate":"01-MAY-1981","sal":2850,"deptno":30}
]
}' , '$.items[*]'
           COLUMNS (
             empno  NUMBER   PATH '$.empno',
             ename  VARCHAR2(50)   PATH '$.ename'
             ));
© www.soinside.com 2019 - 2024. All rights reserved.