Oracle
 sql >> база данни >  >> RDS >> Oracle

Функция JSON_TABLE() в Oracle

В 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() функция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Трябва да подредите имената на служителите според техния град в колоната

  2. XML таблица с Oracle 11g

  3. Как да върна няколко реда от съхранената процедура? (Oracle PL/SQL)

  4. ATAN2() Функция в Oracle

  5. какво представлява материализираните възгледи в Oracle?