Oracle IS JSON в хранимой процедуре - PullRequest
0 голосов
/ 17 декабря 2018

Этот простой запрос работает нормально:

SELECT CASE WHEN SBM_MESSAGE_BODY IS JSON THEN 1 ELSE 0 END AS IS_JSON,  
       JSON_VALUE(SBM_MESSAGE_BODY, '$.CRMId') AS CRMId
  FROM SBM_SERVICEBUS_MESSAGE 
 WHERE SBM_ID=1;

Результаты:

IS_JSON,CRMID
1,      CRM000001

Теперь я помещаю тот же запрос в хранимую процедуру:

CREATE OR REPLACE PROCEDURE USP_SB_TEST 
AS
    ls varchar2(4000);
    ls2 varchar2(4000);

BEGIN

    SELECT CASE WHEN SBM_MESSAGE_BODY IS JSON THEN 1 ELSE 0 END AS IS_JSON,  
           JSON_VALUE(SBM_MESSAGE_BODY, '$.CRMId') AS CRMId
      INTO ls,ls2
      FROM SBM_SERVICEBUS_MESSAGE 
     WHERE SBM_ID=1;

    dbms_output.put_line( 'IS JSON=' || ls );
    dbms_output.put_line( 'CRMId=' || ls2 );

END ;    

И я получил эту ошибку компиляции в строке, содержащей «IS JSON»:

[Ошибка] Проверка синтаксиса (8: 42): ОШИБКА строка 8, столбец 42, конец_линии 8, конец_колонки 45, найдено'JSON', Ожидается: висящая пустая бесконечная NAN NULL из-либо - не присутствует

Я использую TOAD

1 Ответ

0 голосов
/ 17 декабря 2018

Операторы JSON, интегрированные в PL / SQL в версии 12.2 (см. Oracle Database 12c, выпуск 2 (12.2) Новые функции :

Улучшения в JSON

  • Операторы JSON поддерживаются в PL / SQL.
  • Поддержка манипулирования документами JSON с использованием PL / SQL. Сюда входит возможность внесения дополнительных изменений в документы JSON.

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

До Oracle 11g было типично, что PL / SQL поддерживал только подмножество SQL. Затем Oracle улучшил его и принесэто до паритета. С 12.1, было очевидно временное отступление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...