В 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
Обработка на празни резултати
Можете също да използвате клауза, за да посочите върнатата стойност, ако не бъде намерено съвпадение. Тази клауза ви позволява да посочите различен резултат за този тип грешка от резултата, определен с клаузите за грешка.
Тези клаузи са:
NULL
ON
EMPTY
– Връща нула, когато не е намерено съвпадение.ERROR
ON
EMPTY
– Връща съответната грешка на Oracle, когато не е намерено съвпадение.DEFAULT
literal
ON
EMPTY
– Връщаliteral
когато не се намери съвпадение. Типът данни наliteral
трябва да съответства на типа данни на стойността, върната от тази функция.
Вижте документацията на Oracle за повече информация относно JSON_TABLE()
функция.