我正在使用Oracle常规数据库(不像NoSQL或其他东西)和oracle rest数据服务。我需要知道如何使用pl / sql获取HTTP消息体。例如,
通过oracle rest数据服务将json对象发送到oracle应用程序表达式,在应用程序表达式中公开消息体并获取用json构造的内容并逐个获取字段。
答案 0 :(得分:2)
我删除了之前的帖子。您可以将主体作为BLOB并转换为可以使用的字符,但至少在apex.oracle.com的4.2版本的Application Express托管实例中,我使用了自动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;

您可以通过发布以下内容进行测试:
{" ename":" Seema"," dept":10}
演示位于:https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/
确保Content-Type标头设置为application / json
更新:这是一个有效的windows curl命令 curl --header"内容类型:application / json" --request POST --data-ascii" {\" ename \":\" hello \",\" dept \": \" 10 \"}" https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/
答案 1 :(得分:2)
如果您安装了4月15日发布的最新http://www.mywebsite.com/images/logo.png。您可以访问使用JSON的优秀API
我在11.2上使用它并且能够处理每个json,从具有多个阵列和4/5级别的简单到非常复杂的对象。 APEX 5.0
如果您不想使用APEX。只需安装运行时环境即可访问API。
接受非常复杂的JSON对象的(真实)POST方法的示例。具有3-5个级别的多个对象和子阵列的数组。
我将整个身体送到包裹中进行嘎吱嘎吱。 (身体)。 :apikey附带标题(此处不适用)。
:body是blob所以如果您的数据库不是UTF8,那么package需要将它转换为clob并进行任何字符集转换。
之后你拿clob并将其解析为json。
apex_json.parse (p_source => l_clob);
在我的例子中,初始对象是一个数组,所以我用
遍历所有项目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个对象时,。
作为一名经验丰富的PL / SQL程序员,这种设置让我进入了现代网络驱动的世界。