【发布时间】:2020-10-14 20:43:24
【问题描述】:
我正在尝试解析值超过 4000 个字符的 JSON 属性。这是我的示例 json:
[{
"id": "268edbb5d111",
"name": "Sample Product",
"status": "created",
"description": "this is sample product",
"productCharacteristic": [{
"name": "property_1",
"value": "abc",
"valueType": "String"
}, {
"name": "property_2",
"value": 123,
"valueType": "Number"
}, {
"name": "property_3",
"value": "2020-05-01T04:56:07.000+00:00",
"valueType": "Date"
}
]
}
]
这是 PL/SQL 代码:
FOR x IN (SELECT *
FROM json_table(l_response, '$[*]'
COLUMNS
id varchar2(255) PATH '$.id',
name varchar2(255) PATH '$.name',
description varchar2(255) PATH '$.description',
status varchar2(255) PATH '$.status',
productCharacteristic varchar2(4000) FORMAT JSON PATH '$.productCharacteristic'
)
) LOOP
-- do something
END LOOP;
productCharacteristic 属性可能长于 4000,但将其数据类型更改为 VARCHAR2(32000) 会编译带有 ORA-00910 的包:指定长度对其数据类型而言太长,更改为 CLOB 返回 ORA-40484:JSON_TABLE 列的数据类型无效.有没有办法将整个 productCharacteristic 数组作为 JSON 传递并在循环内解析它?
谢谢。
【问题讨论】:
-
您是否在数据库初始化参数中启用了扩展 varchar? MAX_STRING_SIZE docs.oracle.com/en/database/oracle/oracle-database/19/refrn/…
-
如果没有其他方法,我会将其保留为最终解决方案。我不确定客户的 DBA 是否会允许这样做。
-
作为替代方案,如果您在数据库上安装了 APEX(至少 5.1.4),您可以使用 APEX_JSON。
-
您使用的是哪个版本的 Oracle?从 18c 开始允许 CLOB(但我认为不是 12cR1 或 12cR2)。
-
很遗憾,APEX 没有安装。