【发布时间】:2020-06-17 13:54:50
【问题描述】:
我需要在Oracle 12c v12.1.0.2中将JSON转成数据表(键值列)
例如,有一个 JSON 字符串,如
{"ID": 10, "Description": "TestJSON", "status":"New"}
我需要将其转换为:
Column1 Column2
------------------------------------
ID 10
Description TestJSON
status New
现在我的 JSON 字符串可以更改属性的数量,因此我需要保持转换动态。
我尝试使用立即执行:
set serveroutput on;
declare
sqlsmt VARCHAR2(200);
t3 varchar2(50);
begin
sqlsmt := 'SELECT * '||
'FROM json_table( ( select jsonstr from mytable where ID= 10) , ''$[*]'' '||
'COLUMNS ( :t1 PATH ''$.''|| '':t2'' ))';
execute immediate sqlsmt into t3 using 'desc' , '$.Description' ;
DBMS_OUTPUT.PUT_LINE( 'Output Variable: ' || t3);
END;
但是,我收到以下错误:
ORA-00904: : invalid identifier
ORA-06512: at line 8
00904. 00000 - "%s: invalid identifier"
请帮忙。我有 Oracle 12c V1。但我确实需要从 JSON 中动态提取列。
【问题讨论】:
-
为什么要使用动态 SQL - JSON 字段名称和/或输出列是否真的会在运行时提供?
-
JSON 输入的键值对数量可能会有所不同。所以要求是保持 JSON 动态。
-
JSON 是一个变量;问题是
desc(这是非法的)和Description在你运行时是否会有所不同? -
好的,所以我们正在尝试在我们的应用程序中实现可配置的表单。明天说一个新列被添加到表单中,我需要从 JSON 中获取新列的值。我们在数据库表中配置了与 JSON 中的字段名称匹配的列名称。我想运行一个循环将这些字段名称传递给 JSON 并获取它的值。这样,如果将任何新列添加到我的表单字段主控中,我们将能够从 JSON 中动态获取其值。我希望我能解释一下