sql - Oracle 12C - JSON_TABLE 列中的 %TYPE 不起作用
问题描述
我正在尝试将 JSON 数组保存为数据库行:
INSERT INTO log (
"uuid",
"date",
"msg",
"level"
)
WITH t ( log ) AS (
SELECT
JSON_QUERY('[{"uuid": "20000000-0000-0000-0000-000000000000", "date": "2021-10-17", "msg":"aaaa", "level": "debug" },
{"uuid": "20000000-0000-0000-0000-000000000000", "date": "2021-10-17", "msg":"bbbb", "level": "debug" }]'
, '$')
FROM
dual
)
SELECT
"uuid",
"date",
"msg",
"level"
FROM
t
CROSS JOIN
JSON_TABLE ( log, '$'
COLUMNS (
NESTED PATH '$[*]'
COLUMNS (
"uuid" VARCHAR2 ( 36 ) PATH '$.uuid',
"date" DATE PATH '$.date',
"msg" VARCHAR2 ( 1024 ) PATH '$.msg',
"level" VARCHAR2 ( 5 ) PATH '$.level'
)
)
)
当我尝试使用%type
:
NESTED PATH '$[*]'
COLUMNS (
"uuid" VARCHAR2 ( 36 ) PATH '$.uuid',
"date" my_table.date%type PATH '$.date',
"msg" VARCHAR2 ( 1024 ) PATH '$.msg',
"level" VARCHAR2 ( 5 ) PATH '$.level'
)
我收到一个错误:
SQL Error: ORA-40484: invalid data type for JSON_TABLE column
40484. 00000 - "invalid data type for JSON_TABLE column"
*Cause: A column in the provided JSON_TABLE had an unsupported data type.
*Action: Provide a supported data type.
即使列中的类型也是date
.
该类型char(36)
也不起作用,所以我必须使用VARCHAR2(36)
.
%type
在这种情况下可以使用吗?
解决方案
该JSON_TABLE
文档提供了 JSON 查询列子句的语法:
按照JSON_value_return_type
文档链接告诉您允许的数据类型:
鉴于此,不,您不能使用%TYPE
or CHAR
,因为JSON_TABLE
语法不允许。
推荐阅读
- android - Android中的文本和检查矩形检测
- sql - 搜索比较并生成新表结果
- python - 如何使用 sql.alchemy.orm.validates 使用来自不同表的信息验证表字段?
- javascript - 如何淡化渲染组件的底部边缘直到重新渲染?
- vba - 如何将两个工作簿另存为并镜像它们包含的连接
- mysql - MYSQL 不启动
- html - 将 `text-overflow: ellipsis` 与带有 `display: -webkit-box` 的长且无空格的字符串一起使用
- openlayers - OpenLayers 5 获取范围坐标
- jquery - Jquery Divide 不更新变量
- android - 如何从简单的 Cloud Firestore 结构中检索数据