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

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

В Oracle Database, JSON_VALUE() функцията намира определена скаларна JSON стойност в JSON данни и я връща като SQL стойност.

Синтаксис

Синтаксисът е така:

JSON_VALUE
  ( expr [ FORMAT JSON ], JSON_basic_path_expression
    [ JSON_value_returning_clause ] [ JSON_value_on_error_clause ]
    [ JSON_value_on_empty_clause ][ JSON_value_on_mismatch_clause ]
  )

Къде:

  • expr е JSON документът, който искате да направите заявка
  • JSON_basic_path_expression е изразът на пътя на SQL/JSON. Този израз за път се използва за оценка на expr и намерете скаларна стойност на JSON, която съответства или удовлетворява израза за пътя.
  • JSON_query_returning_clause определя типа данни и формата на стойността, върната от функцията.
  • JSON_query_on_error_clause указва стойността, върната при възникване на определени грешки.
  • JSON_query_on_empty_clause посочва връщаната стойност, ако не бъде намерено съвпадение, когато JSON данните се оценяват с помощта на израза за SQL/JSON пътека.
  • JSON_value_on_mismatch_clause може да се използва за определяне на игнориране, грешка или нула за случаи на грешки като допълнителни данни, липсващи данни и грешки при тип. Може да се прилага като цяло или за всеки отделен случай.

Вижте документацията на Oracle за подробно обяснение на незадължителните клаузи.

Пример

Ето пример, за да демонстрирате как JSON_VALUE() функция работи:

SELECT 
    JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;

Резултат:

2

В този случай посочих $.b за да върне скаларната стойност в b .

Ето пример за връщане на стойност от масив:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;

Резултат:

c

Масивите са базирани на нула и така $[2] връща третия елемент на масива.

Обработка на грешки

Има три клаузи, които можете да използвате, за да посочите какво да върнете, когато възникнат определени видове грешки. Клаузите са:

  • NULL ON ERROR – Връща нула, когато възникне грешка. Това е по подразбиране.
  • ERROR ON ERROR – Връща съответната грешка на Oracle, когато възникне грешка.
  • DEFAULT literal ON ERROR – Връща literal когато възникне грешка. Типът данни на literal трябва да съответства на типа данни на стойността, върната от функцията.

Ето един пример:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' NULL ON ERROR) AS "r1",
    JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Oops!' ON ERROR) AS "r2"
FROM DUAL;

Резултат:

     r1       r2 
_______ ________ 
null    Oops!   

Ето го с ERROR ON ERROR клауза:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL;

Резултат:

Error report -
ORA-40462: JSON_VALUE evaluated to no value

Горните клаузи за грешка са за обработка на следните грешки:

  • Първият аргумент не е добре оформени JSON данни, използващи строг или слаб синтаксис на JSON.
  • Открива се нескаларна стойност, когато данните в JSON се оценяват с помощта на израза за SQL/JSON пътя
  • Не е намерено съвпадение, когато данните в JSON се оценяват с помощта на израза за път на SQL/JSON. Можете да замените поведението за този тип грешка, като посочите JSON_value_on_empty_clause .
  • Типът данни на връщаната стойност не е достатъчно голям, за да задържи връщаната стойност

Обработка на празни резултати

Можете също да използвате клауза, за да посочите върнатата стойност, ако не бъде намерено съвпадение. Тази клауза ви позволява да посочите различен резултат за този тип грешка от резултата, определен с клаузите за грешка.

Тези клаузи са:

  • NULL ON EMPTY – Връща нула, когато не е намерено съвпадение.
  • ERROR ON EMPTY – Връща съответната грешка на Oracle, когато не е намерено съвпадение.
  • DEFAULT literal ON EMPTY – Връща literal когато не се намери съвпадение. Типът данни на literal трябва да съответства на типа данни на стойността, върната от тази функция.

Пример:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;

Резултат:

Dang!

Ако пропуснете тази клауза, тогава клаузата за грешка определя стойността, върната, когато не бъде намерено съвпадение.


  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. oci_bind_by_name и to_date PHP/OCI/Oracle

  3. PRVG-2027 Собственикът на файла е непоследователен в различните възли

  4. Задействания за превенция

  5. Oracle sql за преброяване на екземпляри от различни стойности в една колона