Oracle 12C — %ВВЕДИТЕ в столбце JSON_TABLE не работает

#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_TABLE

Перейдя по ссылке на JSON_value_return_type документацию, вы узнаете допустимые типы данных:

Синтаксическая схема для типа данных JSON

Учитывая это, нет, вы не можете использовать %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_TABLE

Перейдя по ссылке на JSON_value_return_type документацию, вы узнаете допустимые типы данных:

Синтаксическая схема для типа данных JSON

Учитывая это, нет, вы не можете использовать %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_TABLE

Перейдя по ссылке на JSON_value_return_type документацию, вы узнаете допустимые типы данных:

Синтаксическая схема для типа данных JSON

Учитывая это, нет, вы не можете использовать %TYPE или CHAR , поскольку JSON_TABLE синтаксис этого не позволяет.