Oracle 12c 中的 JSON_VALUE 和 JSON_TEXTCONTAINS 有什么区别?
What's the difference between JSON_VALUE and JSON_TEXTCONTAINS in Oracle 12c?
我正在使用 Oracle 12c 和 SQL Developer,我还在
列中保留 JSON
CREATE TABLE APPLICATION(
id varchar2(36) PRIMARY KEY,
APPLICATION clob,
constraint APPLICATION check (APPLICATION is JSON)
);
然后我插入了一些行
insert into APPLICATION values(SYS_GUID(), <huge JSON>);
我想进行查询以从 json 列中获取特定字段。
Select app.application
From APPLICATION app
Where (JSON_VALUE(app.application, '$.fields.CustomerID') IN ('Bank0', 'Bank1', 'Bank2', 'Bank3', '001pepebottle', '08092015CoappOrg', 'ConsortiumOrg'))
AND JSON_VALUE(app.application, '$.arrays.PII.arrays.PN.fields.DocumentId', '213213');
但我得到了:
Error en la línea de comandos:4 Columna:75
Informe de error:
Error SQL: ORA-00907: falta el paréntesis derecho
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
使用 JSON_TEXTCONTAINS 我得到了很多不好的结果(我知道它们是错误的,因为我没有坚持 JSOn 字段 DocumentID
等于 213213
)
有什么区别?
JSON_TEXTCONTAINS
is a conditiion; while JSON_VALUE
is a function.
您似乎将对 JSON_VALUE
的第二次调用视为一个条件 - 您没有将其结果与任何内容进行比较,并且传递了太多参数,这导致了 ORA-00907 错误.针对第4行第75列报错,也就是....DocumentId'
.
后面的逗号
看起来您确实想将它 returns 的值与您的固定字符串进行比较:
AND JSON_VALUE(app.application, '$.arrays.PII.arrays.PN.fields.DocumentId') = '213213'
或
AND JSON_VALUE(app.application, '$.arrays.PII.arrays.PN.fields.DocumentId' NUMBER) = 213213
我正在使用 Oracle 12c 和 SQL Developer,我还在
列中保留 JSONCREATE TABLE APPLICATION(
id varchar2(36) PRIMARY KEY,
APPLICATION clob,
constraint APPLICATION check (APPLICATION is JSON)
);
然后我插入了一些行
insert into APPLICATION values(SYS_GUID(), <huge JSON>);
我想进行查询以从 json 列中获取特定字段。
Select app.application
From APPLICATION app
Where (JSON_VALUE(app.application, '$.fields.CustomerID') IN ('Bank0', 'Bank1', 'Bank2', 'Bank3', '001pepebottle', '08092015CoappOrg', 'ConsortiumOrg'))
AND JSON_VALUE(app.application, '$.arrays.PII.arrays.PN.fields.DocumentId', '213213');
但我得到了:
Error en la línea de comandos:4 Columna:75
Informe de error:
Error SQL: ORA-00907: falta el paréntesis derecho
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
使用 JSON_TEXTCONTAINS 我得到了很多不好的结果(我知道它们是错误的,因为我没有坚持 JSOn 字段 DocumentID
等于 213213
)
有什么区别?
JSON_TEXTCONTAINS
is a conditiion; while JSON_VALUE
is a function.
您似乎将对 JSON_VALUE
的第二次调用视为一个条件 - 您没有将其结果与任何内容进行比较,并且传递了太多参数,这导致了 ORA-00907 错误.针对第4行第75列报错,也就是....DocumentId'
.
看起来您确实想将它 returns 的值与您的固定字符串进行比较:
AND JSON_VALUE(app.application, '$.arrays.PII.arrays.PN.fields.DocumentId') = '213213'
或
AND JSON_VALUE(app.application, '$.arrays.PII.arrays.PN.fields.DocumentId' NUMBER) = 213213