我需要通过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进行多个输入
有人可以帮我吗?
您的pl / sql主体仅接受一行,因此之后的所有内容都将被忽略。您需要使用:body引用整个有效负载,并使用oracle中的JSON_TABLE语法遍历整个有效负载。杰夫·史密斯(Jeff Smith)在这里写了一篇不错的文章:www.thatjeffsmith.com。他的代码中的示例并不完全相同,他使用的是单个复杂结构。根据您的情况,您需要遍历数据。
您必须使用json_table遍历元素并逐行处理元素。
如何将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'
));