Этот простой запрос работает нормально:
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