در اوراکل نسخه 21c، زمانی که توابع مربوط به JSON نظیر JSON_QUERY، JSON_TABLE و JSON_VALUE ورودی معتبری نداشته باشند، خطایی رخ نمی دهد و null به کاربر برمی گردد در مثال زیر، کلید Year سه بار تکرار شده و این ورودی معتبر نیست اما دستور select بدون خطا اجرا می شود و صرفا NULL به کاربر برمی گردد:
SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year') YEAR;
YEAR
-----------------
در این شرایط اگر بخواهیم این رفتار را در سطح دستور تغییر دهیم، می توانیم عبارت ERROR ON ERROR را به ورودی اضافه کنیم:
SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year' error on error) ;
ORA-40470: JSON query '$.Year' evaluated to multiple values.
Help: https://docs.oracle.com/error-help/db/ora-40470/
*مقدار پیش فرض NULL ON ERROR است.
در نسخه 23ai برای کنترل این رفتار، پارامتر جدیدی به نام JSON_BEHAVIOR ارائه شده که در سطح session قابل تنظیم است. مقدار پیش فرض این پارامتر، ON_ERROR:NULL است:
SQL> ALTER SESSION SET JSON_BEHAVIOR = 'ON_ERROR:NULL';
Session altered.
SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year');
JSON_VALUE('[{YEAR:1401},{YEAR:1401},{YEAR:1402}]','$.YEAR')
--------------------------------------------------------------------------------
اما می توانیم این مقدار را به ON_ERROR:ERROR تنظیم کنیم تا برای کوئری فوق خطا نمایش داده شود:
SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year');
ORA-40470: JSON query '$.Year' evaluated to multiple values.
Help: https://docs.oracle.com/error-help/db/ora-40470/