从 12.1.0.2.0 开始提供 JSON 支持。它在 12.1.0.1.0 中不可用。
也就是说,您的错误似乎不是来自运行 12.1.0.1.0。
运行 12.1.0.1.0 我得到了
SQL*Plus: Release 12.2.0.1.0 Production on Thu Apr 27 14:16:35 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Thu Apr 27 2017 14:16:27 -07:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> CREATE TABLE colorTab (
2 id NUMBER,
3 color BLOB ) ;
Table created.
SQL>
SQL> ALTER TABLE colorTab
2 ADD CONSTRAINT ensure_json CHECK (color IS JSON STRICT);
ADD CONSTRAINT ensure_json CHECK (color IS JSON STRICT)
*
ERROR at line 2:
ORA-00908: missing NULL keyword
SQL>
还有 12.1.0.2.0 (BP13)..
C:\Users\Mark D Drake>sqlplus scott/oracle@PDB12102
SQL*Plus: Release 12.2.0.1.0 Production on Thu Apr 27 14:20:17 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Thu Apr 27 2017 14:18:43 -07:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> CREATE TABLE colorTab (
2 id NUMBER,
3 color BLOB ) ;
Table created.
SQL>
SQL> ALTER TABLE colorTab
2 ADD CONSTRAINT ensure_json CHECK (color IS JSON STRICT);
Table altered.
SQL>
您的具体环境是什么(包括捆绑补丁等...)
如果您没有捆绑补丁 13 或更高版本,您可以尝试
SQL> ALTER TABLE colorTab
2 ADD CONSTRAINT ensure_json CHECK (color IS JSON FORMAT JSON STRICT);
Table altered.
SQL>
如果这可行,我认为您的版本没有应用强制性 JSON 补丁。如果是这种情况,我会强烈建议更新到最新的数据库捆绑补丁。
SQL> CREATE TABLE colorTab (
2 id NUMBER,
3 color BLOB
4 )
5 /
Table created.
SQL> INSERT INTO colorTab VALUES(1, utl_raw.cast_to_raw (' { "color": "black "dummy"", "rgb": [0,0,0], "hex": "#000000"
} '))
2 /
1 row created.
SQL> Select json_value(utl_raw.cast_to_varchar2(color) format json,'$.color' ERROR on error)
2 from colorTab
3 /
from colorTab
*
ERROR at line 2:
ORA-40441: JSON syntax error
SQL>
使用有效的 JSON
SQL> DROP TABle COLORTAB
2 /
Table dropped.
SQL> CREATE TABLE colorTab (
2 id NUMBER,
3 color BLOB
4 )
5 /
Table created.
SQL> INSERT INTO colorTab VALUES(1, utl_raw.cast_to_raw (' { "color": "black dummy", "rgb": [0,0,0], "hex": "#000000" }
'))
2 /
1 row created.
SQL> Select json_value(utl_raw.cast_to_varchar2(color) format json,'$.color' ERROR on error)
2 from colorTab
3 /
JSON_VALUE(UTL_RAW.CAST_TO_VARCHAR2(COLOR)FORMATJSON,'$.COLOR'ERRORONERROR)
--------------------------------------------------------------------------------
black dummy
SQL>