问题描述
有没有办法将用户定义的类型/集合转换为JSON (与通过XMLTYPE将它们转换为XML的方式相同)?
专家解答
我不知道要做到这一点的内在方法。你可以接近的一种方法是 (从12.2):
-将类型转换为XML
-将此传递到XMLTable中。将元素标记转换为属性名称列。以及它们的内容到一个值列。
-使用json_objectagg将所有行合并为一个文档
这给出了类似的东西:
UPDATE 23 Oct 2019: 19c添加了自动将用户对象映射到JSON并再次映射的功能。
-将类型转换为XML
-将此传递到XMLTable中。将元素标记转换为属性名称列。以及它们的内容到一个值列。
-使用json_objectagg将所有行合并为一个文档
这给出了类似的东西:
create or replace type user_type as object (
attr1 varchar2(100),
attr2 varchar2(100)
);
/
select *
from xmltable (
'/USER_TYPE/*'
passing xmltype ( user_type ( 'val1', 'val2' ) )
columns
att varchar2(100) path './name()',
val varchar2(100) path './text()'
);
ATT VAL
ATTR1 val1
ATTR2 val2
select json_objectagg (
att value val
)
from xmltable (
'/USER_TYPE/*'
passing xmltype ( user_type ( 'val1', 'val2' ) )
columns
att varchar2(100) path './name()',
val varchar2(100) path './text()'
);
JSON_OBJECTAGG(ATTVALUEVAL)
{"ATTR1":"val1","ATTR2":"val2"} UPDATE 23 Oct 2019: 19c添加了自动将用户对象映射到JSON并再次映射的功能。
create or replace type user_type as object (
attr1 varchar2(100),
attr2 varchar2(100)
);
/
with obj as (
select user_type ( 'this', 'that' ) o from dual
)
select json_object ( o ) from obj;
JSON_OBJECT(O)
{"ATTR1":"this","ATTR2":"that"}
create or replace type user_type_tab
is table of user_type;
/
with obj as (
select user_type_tab (
user_type ( 'this', 'that' ),
user_type ( 'another this', 'another that' )
) o
from dual
)
select json_object ( o ) from obj;
JSON_OBJECT(O)
[{"ATTR1":"this","ATTR2":"that"},{"ATTR1":"another this","ATTR2":"another that"}] 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




