#sql #json #oracle #sql-insert #oracle12c
Вопрос:
Я пытаюсь сохранить массив 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" }]'
, '
Когда я пытаюсь использовать %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
в этом случае?
Комментарии:
1. Пожалуйста, проверьте документацию . В нем перечислены все возможные значения для типа
Ответ №1:
В JSON_TABLE
документации приведен синтаксис предложения столбца запроса JSON:
Перейдя по ссылке на JSON_value_return_type
документацию, вы узнаете допустимые типы данных:
Учитывая это, нет, вы не можете использовать %TYPE
или CHAR
, поскольку JSON_TABLE
синтаксис этого не позволяет.
)
FROM
dual
)
SELECT
"uuid",
"date",
"msg",
"level"
FROM
t
CROSS JOIN
JSON_TABLE ( log, 'Когда я пытаюсь использовать %type
:
Я получаю сообщение об ошибке:
Даже несмотря на то, что тип в столбце тоже date
есть .
Кроме того, этот тип char(36)
не работает, поэтому я должен использовать VARCHAR2(36)
.
Можно ли его использовать %type
в этом случае?
Комментарии:
1. Пожалуйста, проверьте документацию . В нем перечислены все возможные значения для типа
Ответ №1:
В JSON_TABLE
документации приведен синтаксис предложения столбца запроса JSON:
Перейдя по ссылке на JSON_value_return_type
документацию, вы узнаете допустимые типы данных:
Учитывая это, нет, вы не можете использовать %TYPE
или CHAR
, поскольку JSON_TABLE
синтаксис этого не позволяет.
COLUMNS (
NESTED PATH '$[*]'
COLUMNS (
"uuid" VARCHAR2 ( 36 ) PATH '$.uuid',
"date" DATE PATH '$.date',
"msg" VARCHAR2 ( 1024 ) PATH '$.msg',
"level" VARCHAR2 ( 5 ) PATH '$.level'
)
)
)
Когда я пытаюсь использовать %type
:
Я получаю сообщение об ошибке:
Даже несмотря на то, что тип в столбце тоже date
есть .
Кроме того, этот тип char(36)
не работает, поэтому я должен использовать VARCHAR2(36)
.
Можно ли его использовать %type
в этом случае?
Комментарии:
1. Пожалуйста, проверьте документацию . В нем перечислены все возможные значения для типа
Ответ №1:
В JSON_TABLE
документации приведен синтаксис предложения столбца запроса JSON:
Перейдя по ссылке на JSON_value_return_type
документацию, вы узнаете допустимые типы данных:
Учитывая это, нет, вы не можете использовать %TYPE
или CHAR
, поскольку JSON_TABLE
синтаксис этого не позволяет.