Основная проблема заключается в том, что view
- это зарезервированное ключевое слово, и поэтому его нельзя использовать в качестве имени столбца (кроме как в двойных кавычках - чего лучше избегать). Вы хотели создать столбец с именем view
из данных в вашем JSON - вот почему вы получили ошибку «неверный идентификатор».
Но в вашем коде есть множество других ошибок; если вы даже дошли до ошибки «недопустимый идентификатор», это означает, что опубликованный вами код - это , а не код, который вы запустили.
Например, даже в insert
оператор, у вас есть дополнительная одинарная кавычка после открывающей скобки. Это означает, что открывающая скобка представляет собой строку (один символ), а остальное - неизвестно что. Мне пришлось удалить эту ошибочную одинарную кавычку, чтобы insert
заработал. Как вы смогли использовать этот явно синтаксически неверный оператор?
В операторе select
вам не хватает запятой после псевдонима x
(перед ключевым словом JSON_TABLE
). Ни в коем случае вы не получите ошибку «недопустимый идентификатор» с , что синтаксическая ошибка в коде.
В функции JSON_TABLE не должно быть запятой между '$'
и COLUMNS
пункт. С этой запятой вы получите другую ошибку, а не «недопустимый идентификатор» - поэтому я не верю, что то, что вы опубликовали, является вашим настоящим кодом.
Et c. Если все, что вы получили, это ошибка «неверный идентификатор», просто выберите другое имя для столбца (view
не сработает) и посмотрите, что произойдет. Хотя ... есть еще одна ошибка, которая приведет к неожиданному результату. JSON чувствителен к регистру. Имя атрибута в JSON - View
с большой буквы V
. Поэтому вы должны ссылаться на него как на $.View
в JSON_TABLE
; у вас есть $.view
, что не соответствует ни одному атрибуту в вашем JSON, поэтому вы получите null
для этого столбца (если вы не измените его для соответствия заглавным буквам из JSON).
Вот полный пример со всеми исправленными ошибками.
Сначала создайте таблицу. Я делаю все за один шаг:
create table r_data (id,data) as select 1,'{"View":"100",
"Assignment Title":"Collect all snippets from the Library",
"Status":"In Progress",
"Active/Not Active":"Depends"}' from dual;
Затем вот запрос и его результат. Обратите внимание на двойные кавычки вокруг имен свойств со встроенными пробелами (и прямого sla sh, et c.).
select x.id,
j.view_, assignment_title, j.status, j.active_not_active
from r_data x,
json_table(x.data,'$'
columns (view_ number(10) path '$.View',
assignment_title varchar2(50) path '$."Assignment Title"',
status varchar2(20) path '$.Status',
active_not_active varchar2(20) path '$."Active/Not Active"'
)
) j
;
ID VIEW_ ASSIGNMENT_TITLE STATUS ACTIVE_NOT_ACTIVE
-- ----- ------------------------------------- ----------- ------------------
1 100 Collect all snippets from the Library In Progress Depends