暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PL/SQL Oracle 12c中的JSON

askTom 2017-03-07
719

问题描述

你好,

我有一个以下结构的程序:
procedure p_json (i_json clob)
is 
 l_firstname vacrchar2(10);
begin
--some code here
end;


输入参数i_json将接收Json_object。下面是json对象的结构:
{
          "FirstName"      : "John"
}


下面的查询用于从sql中的表中读取json_object:
select json_value(j.doc,'$.FirstName')
from table j; //assuming doc is the column name in table


您能否建议如何在pl/sql过程中访问json对象的值,而无需将输入clob(json对象) 插入表中。

谢谢!!

专家解答

在12.1.0.2 json_value是一个SQL函数。但是您可以在PL/SQL中使用,方法是将其放置在 “select... 从dual” 查询中!

declare
  json_doc varchar2(1000);
  fname    varchar2(10);
begin
  json_doc := '{
          "FirstName"      : "John"
}';
  
  select json_value(json_doc, '$.FirstName')
  into   fname
  from   dual;
  
  dbms_output.put_line(fname);
  
end;
/

PL/SQL procedure successfully completed.
John


或者在PL/SQL中使用12.2 JSON更好。您可以使用json_value作为本机函数:

select * from v$version;

BANNER                                                                        CON_ID  
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production  0       
PL/SQL Release 12.2.0.1.0 - Production                                        0       
CORE 12.2.0.1.0 Production                                                    0       
TNS for Linux: Version 12.2.0.1.0 - Production                                0       
NLSRTL Version 12.2.0.1.0 - Production                                        0 

declare
  json_doc varchar2(1000);
  fname    varchar2(10);
begin
  json_doc := '{
          "FirstName"      : "John"
}';
  
  fname := json_value(json_doc, '$.FirstName');
  
  dbms_output.put_line(fname);
  
end;
/

PL/SQL procedure successfully completed.
John


或者新的JSON对象类型来获取文档的一部分:

declare
  json_doc json_object_t;
  fname    varchar2(10);
begin
  json_doc := json_object_t.parse('{
          "FirstName"      : "John"
}');
  
  fname := json_doc.get_String('FirstName');
  
  dbms_output.put_line('Name: ' || fname);
  
end;
/

PL/SQL procedure successfully completed.
Name: John


有关12.2中PL/SQL中的JSON的更多信息,请参阅:

https://blogs.oracle.com/sql/entry/12_things_developers_will_love#json-plsql
http://docs.oracle.com/database/122/ADJSN/overview-of-pl-sql-object-types-for-json.htm#ADJSN-GUID-A22995AD-A144-4A5C-AB80-A17225A56E41
http://docs.oracle.com/database/122/ADJSN/using-PLSQL-object-types-for-JSON.htm#ADJSN-GUID-F0561593-D0B9-44EA-9C8C-ACB6AA9474EE
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论