2016-12-29 8 views
1

私は特定のを得るために、クエリを作りたいまた、私はその後、私はいくつかの行Oracle 12cのJSON_VALUEとJSON_TEXTCONTAINSの違いは何ですか?

insert into APPLICATION values(SYS_GUID(), <huge JSON>); 

を挿入した列

CREATE TABLE APPLICATION(
    id varchar2(36) PRIMARY KEY, 
    APPLICATION clob, 
    constraint APPLICATION check (APPLICATION is JSON) 
); 

でJSONを永続化しています、オラクル12cとSQL Developerを使用しています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'); 

が、私が得た:何私は多くの悪い結果を得たJSON_TEXTCONTAINSを使用して

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: 

(私はフィールドDocumentIDでJSONを持続していないので、私は彼らが間違っている知っているが213213に等しい)

違い?

答えて

2

JSON_TEXTCONTAINS is a conditiion; JSON_VALUE is a function

JSON_VALUEの2番目の呼び出しを条件として扱っているようです。その結果と何も比較していないため、引数が多すぎるためにORA-00907エラーが発生しています。エラーは、行4の列75に対して報告されます。これは、....DocumentId'の後のコンマです。あなたが実際にそれがあなたの固定文字列で返した値を比較したいように見えます

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 
+0

は、非常に答えをinstringた、ありがとうございました – cheloncio

関連する問題