В Oracle Database, JSON_TABLE() функцията създава релационен изглед на JSON данни. Позволява ви да представите стойностите в JSON документ във формат на таблица – като редове и колони.
Синтаксис
Синтаксисът е така:
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause ) Къде:
exprе JSON документът, който искате да направите заявкаJSON_basic_path_expressionе изразът на пътя на SQL/JSON.JSON_query_on_error_clauseуказва стойността, върната при възникване на определени грешки.JSON_query_on_empty_clauseпосочва върнатата стойност, ако не е намерено съвпадение.JSON_columns_clauseдефинира колоните във виртуалната релационна таблица, върната от функцията.
JSON_TABLE() функцията може да се използва само в FROM клауза на SELECT изявление.
Пример
Ето пример, за да демонстрирате как работи:
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c)); Резултат:
A B C ____ ____ ____ 1 2 3
Ето го с малко повече данни:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
); Резултат:
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
По-малко колони
Ето какво се случва, ако намалим броя на колоните, посочени в COLUMNS клауза:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b)
); Резултат:
A B ____ ____ 1 2 4 5 7 8
Можем да постигнем същия резултат, като посочим избрани колони в SELECT списък:
SELECT a, b
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
); Резултат:
A B ____ ____ 1 2 4 5 7 8
Изберете конкретни редове
Можем да използваме клаузи като WHERE за да изберете само онези редове, които отговарят на определен критерий:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
)
WHERE b = 5; Резултат:
A B C ____ ____ ____ 4 5 6
Обработка на грешки
Можем да използваме следните клаузи за справяне с грешки:
NULL ON ERROR- Ако входът не е добре оформен JSON, не се връщат повече редове от точката, в която е открита грешката.
- Ако не бъде намерено съвпадение, когато изразът за пътя на реда се оценява, не се връщат редове.
- Задава поведението на грешка по подразбиране за всички изрази на колони на
NULL ON ERROR
ERROR ON ERROR- Ако входът не е добре оформен JSON, възниква грешка.
- Ако не бъде намерено съвпадение, когато изразът за пътя на реда е оценен, ще бъде изведена грешка
- Задава поведението на грешка по подразбиране за всички изрази на колони на
ERROR ON ERROR
Ето пример за NULL ON ERROR :
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]',
'$[*]'
NULL ON ERROR
COLUMNS(a, b, c)
); Резултат:
A B C ____ ____ ____ 1 2 3 4 5 6
Тъй като JSON_TABLE() функцията поддържа оценка на поточно предаване, редовете могат да бъдат върнати, преди да се срещне частта от входа с грешката. Точно това можем да видим с този пример – получихме първите два реда, но не и третия (поради тази част от JSON не е добре оформен JSON).
Ето го с ERROR ON ERROR клауза:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]',
'$[*]'
ERROR ON ERROR
COLUMNS(a, b, c)
); Резултат:
Error report - ORA-40441: JSON syntax error
Обработка на празни резултати
Можете също да използвате клауза, за да посочите върнатата стойност, ако не бъде намерено съвпадение. Тази клауза ви позволява да посочите различен резултат за този тип грешка от резултата, определен с клаузите за грешка.
Тези клаузи са:
NULLONEMPTY– Връща нула, когато не е намерено съвпадение.ERRORONEMPTY– Връща съответната грешка на Oracle, когато не е намерено съвпадение.DEFAULTliteralONEMPTY– Връщаliteralкогато не се намери съвпадение. Типът данни наliteralтрябва да съответства на типа данни на стойността, върната от тази функция.
Вижте документацията на Oracle за повече информация относно JSON_TABLE() функция.