SQL For JSON条件
SQL for JSON条件によって、次のようにJavaScript Object Notation (JSON)データをテストできます。
- 
                        
IS JSON条件によって、式が構文的に正しいJSONデータかどうかをテストできます。
 - 
                        
JSON_EQUAL条件は、2つのJSON値が同じかどうかをテストします。
 - 
                        
JSON_EXISTS条件によって、指定されたJSON値がJSONデータにあるかどうかをテストできます。
 - 
                        
JSON_TEXTCONTAINS条件によって、指定された文字列がJSONプロパティ値にあるかどうかをテストできます。
 
JSON_condition::=
IS JSON条件
SQL/JSON条件is jsonおよびis not jsonは補足的な条件です。これらは、引数が構文的に正しい(つまり、整形式の)JSONデータかどうかをテストします。オプションのキーワードVALIDATEを指定すると、データが特定のJSONスキーマに関しても有効かどうかがテストされます。
                     
- 
                           
テストしたデータが構文的に正しく、キーワード
VALIDATEが存在しない場合、IS JSONはtrueを戻し、IS NOT JSONはfalseを戻します。 - 
                           
キーワード
VALIDATEが存在する場合、データは、指定されたJSONスキーマに関して整形式であることと有効であることの両方を確認するためにテストされます。キーワードVALIDATE(オプションでキーワードUSINGが続く)の後には、検証対象のJSONスキーマであるSQL文字列リテラルが後続している必要があります。 - 
                           
解析または検証中にエラーが発生し、データが整形式でないか、有効でないとみなされた場合、
IS JSONはfalseを戻し、IS NOT JSONはtrueを戻します。解析および検証エラーは、trueまたはfalseを戻す条件自体によって処理されます。解析と検証のどちらによるものでもない他のエラーの場合は、これらのエラーが発生します。 - 
                           
IS JSONおよびIS NOT JSONは、SELECT文のCASE式またはWHERE句で使用できます。IS JSONはチェック制約で使用できます。 
IS_JSON_condition::=
IS_JSON_modifier_list::=
IS_JSON_modifier::=
JSON_type_modifier::=
SQL-JSON-Conditions.html#GUID-99B9493D-2929-4A09-BA39-A56F8E7319DA__SECTION_J33_1SY_CGC
IS_JSON_args::=
- 
                           
exprは、評価の対象となるJSONデータを指定するために使用します。テキスト・リテラルを評価する式を指定します。exprが列である場合、列のデータ型はVARCHAR2、CLOBまたはBLOBのいずれかである必要があります。exprがnullまたは長さゼロのテキスト・リテラルを評価する場合、この条件はUNKNOWNを戻します。 - 
                           
json_modifier_specのLIMITは、JSON修飾子の指定全体に適用されます。 - 
                           
JSON単一型スカラー値のNULLを許可するには、
json_array_specにALLOWNULLを指定します。 - 
                           
JSON単一型スカラー値のNULLを禁止するには、
json_array_specにDISALLOWNULLを指定します。これはデフォルトです。 - 
                           
JSON配列要素を昇順でソートするには、
json_array_specにSORTを指定します。詳細は、『JSON開発者ガイド』のSQL/JSON条件IS JSONおよびIS NOT JSONを参照してください。
 
IS_JSON_Modifier
JSON型データの場合は、VALIDATEを単純なJSONスキーマとともに使用するかわりに、IS JSONの修飾子OBJECT、ARRAYまたはSCALARをそれぞれ使用できます。
                     
詳細は、JSON開発者ガイドのSQL JSON条件のIS JSONとIS NOT JSONを参照してください。
is_json_args
- 
                           
exprがデータ・タイプBLOBの列の場合、FORMATJSONを指定する必要があります。 - 
                           
STRICTを指定すると、この条件は厳密なJSON構文のみを整形式のJSONデータとみなします。LAXを指定すると、この条件は緩いJSON構文のみを整形式のJSONデータとみなします。デフォルトはLAXです。STRICTおよびLAX構文の詳細は、「厳密なJSON構文と緩慢なJSON構文について」および「SQLファンクションおよび条件のTYPE句」を参照してください - 
                           
WITHUNIQUEKEYSを指定すると、キー名が各オブジェクト内で一意である場合のみ、この条件は整形式のJSONデータとみなします。WITHOUTUNIQUEKEYSを指定すると、キー名がオブジェクト内で重複する場合、この条件は整形式のJSONデータとみなします。WITHOUTUNIQUEKEYSテストは、WITHUNIQUEKEYSテストより高速に実行されます。デフォルトはWITHOUTUNIQUEKEYSです。 - 
                           
データが指定のJSONスキーマに関して有効であることもテストするには、オプションのキーワード
VALIDATEを指定します。 - 
                           
JSON型の値が特定の型であることを強制するには、JSON型修飾子を使用できます。『JSON開発者ガイド』のSQL/JSON条件IS JSONおよびIS NOT JSONを参照してください。
 
JSONスキーマ検証
JSONスキーマでは通常、他のJSONドキュメントの許可される構造とデータ型を指定します。したがって、JSONスキーマを使用してJSONデータを検証できます。次の方法でJSONスキーマに対してJSONデータを検証できます。
- 
                           
キーワード
VALIDATEおよびJSONスキーマの名前を指定して条件IS JSON(またはIS NOT JSON)を使用して、ターゲット・データがそのスキーマに対して有効(または無効)であるかどうかをテストします。スキーマは、リテラル文字列または使用状況ドメインとして指定できます。(キーワードVALIDATEの後にはキーワードUSINGを指定することもできます)。条件is jsonの
VALIDATEは、その条件が使用可能な任意の場所で使用できます。これには、WHERE句での使用やチェック制約としての使用が含まれ、これによって有効なデータのみが列に挿入されるようにします。JSON型の列のチェック制約として使用する場合は、is jsonを省略して、キーワード
VALIDATEのみを直接使用することもできます。JSON型の列の場合、次の2つの表作成は同等です。CREATE TABLE tab (jcol JSON VALIDATE '{"type" : "object"}’);CREATE TABLE tab (jcol JSON CONSTRAINT jchk CHECK (jcol IS JSON VALIDATE '{"type" : "object"}’)); - 
                           
JSON型データのチェック制約として使用状況ドメインを使用します。次に例を示します。
CREATE DOMAIN jd AS JSON CONSTRAINT jchkd CHECK (jd IS JSON VALIDATE '{"type" : "object"});CREATE TABLE jtab(jcol JSON DOMAIN jd);
スキーマからドメインを作成する場合は、制約とis jsonを省略して、キーワード
VALIDATEのみを直接使用することもできます。このドメイン作成は、前のものと同等です。CREATE DOMAIN jd AS JSON VALIDATE '{"type" : "object"}; - 
                           
バイナリJSON形式をサポートするデータベースでは、クライアントでデータをエンコードできます。このような場合、データベースはテキストJSONをバイナリ表現に変換する必要がないため、拡張データ型を使用した検証を実行できます。
テキストJSONがデータベースに送信されると、それに続けてバイナリ表現へのエンコーディング・プロセスが実行されます(サーバー側エンコーディング)。こうした状況では、
CASTモードでスキーマ・バリデータを操作できます。つまり、バイナリ・エンコーダは、JSONスキーマの拡張データ型キーワードに指定された値を使用し、スカラー・フィールドをバイナリ表現にエンコードできます。キャストの対象となるのはスカラー型のみです。CREATE TABLE jtab ( id NUMBER(9) PRIMARY KEY, jcol JSON CHECK(jcol IS JSON VALIDATE CAST USING '{ "type": "object", "properties": { "firstName": { "extendedType": "string", "maxLength": 50 }, "birthDate" : { "extendedType": "date" } }, "required": ["firstName", "birthDate"] }' ) );次のテキストJSONは、前述のスキーマごとに有効なドキュメントです:
{ "firstName": "Scott", "birthDate": "1990-04-02" } - 
                           
『JSON開発者ガイド』のJSONスキーマで詳しく説明されているPL/SQLファンクションを使用します。
 
静的ディクショナリ・ビューDBA_JSON_SCHEMA_COLUMNS、ALL_JSON_SCHEMA_COLUMNSおよびUSER_JSON_SCHEMA_COLUMNSには、チェック制約として使用するJSONスキーマが記述されます。
                     
これらのビューの各行には、JSONスキーマで定義された表、JSON列および制約の名前に加えてJSONスキーマ自体が含まれるとともに、JSONスキーマにキャスト・モードが指定されているかどうかが示されます。ビューDBA_JSON_SCHEMA_COLUMNSおよびALL_JSON_SCHEMA_COLUMNSには、表所有者の名前も含まれます。 
                     
例
IS JSON VALIDATE
次の例では、JSON検証チェックがあるJSON制約jtlisjを含むスキーマjsontab1が作成されます。
                     
CREATE TABLE jsontab1(
    id NUMBER(4),
    j  JSON CONSTRAINT jt1isj CHECK (j IS JSON VALIDATE USING     
     '{
       "type":"object", 
       "minProperties": 2
      }')
    );次の例は、JSONオブジェクト以外の値を挿入しようとしたときのエラーを示しています。
INSERT INTO jsontab1(j) VALUES ('["a", "b"]');
INSERT INTO jsontab1(j) VALUES ('["a", "b"]')
*
ERROR at line 1:
ORA-02290: check constraint (SYS.JT1ISJ) violated
次の2つの例は、有効な入力を使用して行が追加されたことを示しています。
INSERT INTO jsontab1(j) VALUES ('{"a": "a", "b": "b"}');
   1 row created.
 INSERT INTO jsontab1(jschd) VALUES (json('"a json string"'));
1 row created.
次の例では、別の制約jschdsvが表jsontab1に追加されます。
                     
ALTER TABLE jsontab1
ADD jschd JSON CONSTRAINT jschdsv
                   CHECK (jschd IS JSON VALIDATE USING '{"type":"string"}');
Table altered.
SQL> INSERT INTO jsontab1(jschd) VALUES (json('3.1415'));
INSERT INTO jsontab1(jschd) VALUES (json('3.1415'))
*
ERROR at line 1:
ORA-02290: check constraint (SYS.JSCHDSV) violatedWHERE句でのIS JSON VALIDATE
SELECT COUNT(1) FROM jsontab1 WHERE j IS JSON 
VALIDATE
         '{"type" : "object",
              "properties" : {
                  "id" : {
                      "type" : "number"
                   }
               }
           }';厳密なJSON構文または緩いJSON構文のテスト: 例
次の文は、col1列を使用した表tを作成します。
                     
CREATE TABLE t (col1 VARCHAR2(100));
次の文は、値を表tの列col1に挿入します。
                     
INSERT INTO t VALUES ( '[ "LIT192", "CS141", "HIS160" ]' );
INSERT INTO t VALUES ( '{ "Name": "John" }' );
INSERT INTO t VALUES ( '{ "Grade Values" : { A : 4.0, B : 3.0, C : 2.0 } }');
INSERT INTO t VALUES ( '{ "isEnrolled" : true }' );
INSERT INTO t VALUES ( '{ "isMatriculated" : False }' );
INSERT INTO t VALUES (NULL);
INSERT INTO t VALUES ('This is not well-formed JSON data');
次の文は、表tを問い合せて、整形式のJSONデータであるcol1値を戻します。STRICTおよびLAXキーワードが指定されていないため、この例はデフォルトのLAX設定を使用します。このため、この問合せは、厳密なJSON構文または緩いJSON構文を使用する値を戻します。
                     
SELECT col1
  FROM t
  WHERE col1 IS JSON;
COL1
--------------------------------------------------
[ "LIT192", "CS141", "HIS160" ]
{ "Name": "John" }
{ "Grade Values" : { A : 4.0, B : 3.0, C : 2.0 } }
{ "isEnrolled" : true }
{ "isMatriculated" : False }
次の文は、表tを問い合せて、整形式のJSONデータであるcol1値を戻します。この例は、STRICT設定を指定します。このため、この問合せは、厳密なJSON構文を使用する値のみ戻します。
                     
SELECT col1
  FROM t
  WHERE col1 IS JSON STRICT;
COL1
--------------------------------------------------
[ "LIT192", "CS141", "HIS160" ]
{ "Name": "John" }
{ "isEnrolled" : true }
次の文は表tを問い合せて緩いJSON構文を使用するcol1値を戻しますが、厳密なJSON構文を使用するcol1値を省略します。このため、この問合せは、緩いJSON構文で使用できる例外を含む値のみ戻します。
                     
SELECT col1
  FROM t
  WHERE col1 IS NOT JSON STRICT AND col1 IS JSON LAX;
COL1
--------------------------------------------------
{ "Grade Values" : { A : 4.0, B : 3.0, C : 2.0 } }
{ "isMatriculated" : False }一意キーのテスト: 例
次の文は、col1列を使用した表tを作成します。
                     
CREATE TABLE t (col1 VARCHAR2(100));
次の文は、値を表tの列col1に挿入します。
                     
INSERT INTO t VALUES ('{a:100, b:200, c:300}');
INSERT INTO t VALUES ('{a:100, a:200, b:300}');
INSERT INTO t VALUES ('{a:100, b : {a:100, c:300}}');
次の文は、表tを問い合せて各オブジェクト内に一意のキー名を持つ整形式のJSONデータであるcol1値を戻します。
                     
SELECT col1 FROM t
  WHERE col1 IS JSON WITH UNIQUE KEYS;
COL1
---------------------------
{a:100, b:200, c:300}
{a:100, b : {a:100, c:300}}
キー名aが2回表示され、2つの異なるオブジェクトにあるため、2番目の行が戻されます。
                     
次の文は、表tを問い合せて、各オブジェクト内に一意のキー名があるかどうかに関係なく整形式のJSONデータであるcol1値を戻します。
                     
SELECT col1 FROM t
  WHERE col1 IS JSON WITHOUT UNIQUE KEYS;
COL1
---------------------------
{a:100, b:200, c:300}
{a:100, a:200, b:300}
{a:100, b : {a:100, c:300}}CHECK制約としてのIS JSONの使用方法: 例
次の文は、表j_purchaseorderを作成し、JSONデータを列po_documentに格納します。この文は、CHECK制約としてIS JSON条件を使用し、整形式のJSONのみ列po_documentに格納します。
                     
CREATE TABLE j_purchaseorder (id RAW (16) NOT NULL, date_loaded TIMESTAMP(6) WITH TIME ZONE, po_document CLOB CONSTRAINT ensure_json CHECK (po_document IS JSON));
関連項目:
『JSON開発者ガイド』の条件IS JSONおよびIS NOT JSON。
JSON_EQUAL条件
目的
Oracle SQL条件JSON_EQUALは2つのJSON値を比較してtrueを戻します。2つの値が同じでない場合、falseを返します。入力値は有効なJSONデータである必要があります。
                     
この比較では、意味のない空白と、意味のないオブジェクト・メンバーの順序は無視されます。たとえば、JSONオブジェクトに同じメンバーがある場合、その順序に関係なく、これらのオブジェクトは等しくなります。
                     
 比較された2つの入力のいずれかに1つ以上のフィールドの重複がある場合、JSON_EQUALによって戻される値は特定されません。
                     
JSON_EQUALでは、ERROR ON ERROR、FALSE ON ERRORおよびTRUE ON ERRORがサポートされています。デフォルトはFALSE ON ERRORです。エラーの典型的な例は、入力式が有効なJSONでない場合です。 
                     
例
次の文はTRUEを戻します。
JSON_EQUAL('{}', '{ }')JSON_EQUAL('{a:1, b:2}', '{b:2 , a:1 }')次の文はFALSEを返します。
JSON_EQUAL('{a:"1"}', '{a:1 }') -> FALSE次の文は、ORA-40441 JSON構文エラーになります
                     
JSON_EQUAL('[1]', '[}' ERROR ON ERROR)関連項目:
- 
                              
詳細は、Oracle Database JSON開発者ガイド を参照してください
 
JSON_EXISTS条件
SQL/JSON条件JSON_EXISTSを使用して、指定されたJSON値がJSONデータにあるかどうかをテストします。この条件は、JSON値が存在する場合にTRUEを戻し、JSON値が存在しない場合にFALSEを戻します。
                     
JSON_exists_condition::=
(JSON_basic_path_expression: Oracle Database JSON開発者ガイドを参照)
                     
JSON_passing_clause::=
JSON_exists_on_error_clause::=
expr
この句は、評価の対象となるJSONデータを指定するために使用します。exprでは、テキスト・リテラルを評価する式を指定します。exprが列である場合、列のデータ型はVARCHAR2、CLOBまたはBLOBのいずれかである必要があります。exprがnullまたは長さゼロのテキスト・リテラルを評価する場合、この条件はUNKNOWNを戻します。
                     
exprが厳密なまたは緩い構文を使用した整形式のJSONデータのテキスト・リテラルでない場合、この条件はデフォルトでFALSEを戻します。JSON_exists_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_exists_on_error_clauseを参照してください。
                     
FORMAT JSON
exprがデータ・タイプBLOBの列の場合、FORMAT JSONを指定する必要があります。
                     
JSON_basic_path_expression
この句を使用して、SQL/JSONパス式を指定します。この条件はパス式を使用してexprを評価し、パス式と一致する(パス式を満たす)JSON値があるかどうかを判断します。パス式はテキスト・リテラルである必要がありますが、パス式には、JSON_passing_clauseによって値がパス式に渡される変数を含めることができます。JSON_basic_path_expressionのセマンティクスの詳細は、Oracle Database JSON開発者ガイドを参照してください。
                     
JSON_passing_clause
この句を使用して、値をパス式に渡します。exprには、VARCHAR2、NUMBER、BINARY_DOUBLE、DATE、TIMESTAMPまたはTIMESTAMP WITH TIME ZONEデータ型の値を指定します。exprの評価結果は、JSON_basic_path_expressionの対応する識別子にバインドされます。
                  JSON_exists_on_error_clause
この句を使用して、exprが整形式のJSONデータでない場合にこの条件で戻される値を指定します。
                     
次の句を指定できます。
- 
                           
ERRORONERROR-exprが整形式のJSONデータでない場合、適切なOracleエラーを戻します。 - 
                           
TRUEONERROR-exprが整形式のJSONデータでない場合にTRUEを戻します。 - 
                           
FALSEONERROR-exprが整形式のJSONデータでない場合にFALSEを戻します。これはデフォルトです。 
TYPE句
STRICTおよびLAX構文の詳細は、「厳密なJSON構文と緩慢なJSON構文について」および「SQLファンクションおよび条件のTYPE句」を参照してください
JSON_exists_on_empty_clause
この句を使用して、JSONデータがSQL/JSONパス式を使用して評価されるときに一致が見つからない場合にこのファンクションで戻される値を指定します。
次の句を指定できます。
- 
                           
ERRORONEMPTY-exprが整形式のJSONデータでない場合に、適切なOracleエラーを戻します。 - 
                           
TRUEONEMPTY-exprが整形式のJSONデータでない場合にTRUEを戻します。 - 
                           
FALSEONEMPTY- exprが整形式のJSONデータでない場合にFALSEを戻します。これはデフォルトです。 
例
次の文は、name列を使用した表tを作成します。
                     
CREATE TABLE t (name VARCHAR2(100));
次の文は、値を表tの列nameに挿入します。
                     
INSERT INTO t VALUES ('[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]');
INSERT INTO t VALUES ('[{first:"Mary"}, {last:"Jones"}]');
INSERT INTO t VALUES ('[{first:"Jeff"}, {last:"Williams"}]');
INSERT INTO t VALUES ('[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]');
INSERT INTO t VALUES (NULL);
INSERT INTO t VALUES ('This is not well-formed JSON data');
次の文は表tの列nameを問い合せて、最初の要素がプロパティ名firstのオブジェクトである配列で構成されるJSONデータを戻します。ON ERROR句は指定されません。このため、JSON_EXISTS条件は、整形式のJSONデータでない値に対してFALSEを戻します。
                     
SELECT name FROM t
  WHERE JSON_EXISTS(name, '$[0].first');
NAME
--------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Mary"}, {last:"Jones"}]
[{first:"Jeff"}, {last:"Williams"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]
次の文は表tの列nameを問い合せて、2番目の要素がプロパティ名middleのオブジェクトである配列で構成されるJSONデータを戻します。ON ERROR句は指定されません。このため、JSON_EXISTS条件は、整形式のJSONデータでない値に対してFALSEを戻します。
                     
SELECT name FROM t
  WHERE JSON_EXISTS(name, '$[1].middle');
NAME
--------------------------------------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]
次の文は前の文と似ていますが、TRUE ON ERROR句が指定されている点が異なります。このため、JSON_EXISTS条件は、整形式のJSONデータでない値に対してTRUEを戻します。
                     
SELECT name FROM t
  WHERE JSON_EXISTS(name, '$[1].middle' TRUE ON ERROR);
NAME
--------------------------------------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]
This is not well-formed JSON data
次の文は表tの列nameを問い合せて、プロパティ名lastのオブジェクトである要素を含む配列で構成されるJSONデータを戻します。ワイルドカード記号(*)が配列索引に指定されます。このため、配列の索引番号に関係なく、問合せは、そのようなオブジェクトを含む配列を戻します。
                     
SELECT name FROM t
  WHERE JSON_EXISTS(name, '$[*].last');
NAME
--------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Mary"}, {last:"Jones"}]
[{first:"Jeff"}, {last:"Williams"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]次の文は、passing句を使用してフィルタ式を実行します。比較述語(@.middle == $var1)のSQL/JSON変数$var1は、PASSING句のバインド変数var1からその値を取得します。
                     
値の比較にバインド変数を使用すると、問合せの再コンパイルが回避されます。
SELECT name FROM t
  WHERE JSON_EXISTS(name, '$[1]?(@.middle == $var1)' PASSING 'Anne' as "var1");
NAME
--------------------------------------------------------------------------------
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]関連項目:
JSON_TEXTCONTAINS条件
SQL/JSON条件JSON_TEXTCONTAINSを使用して、指定された文字列がJSONプロパティ値にあるかどうかをテストします。この条件を使用して、特定のワードまたは数値でJSONデータをフィルタ処理できます。
                     
この条件では次の引数を使用します。
- 
                           
JSONデータを含む表またはビューの列。JSONデータでの使用に特化して設計されているOracle TextデータであるJSON検索索引を列に定義する必要があります。列のJSONデータの各行は、JSONドキュメントといいます。
 - 
                           
SQL/JSONパス式。ドキュメント内の特定のJSONオブジェクトと一致するかどうかの試行で、パス式が各JSONドキュメントに適用されます。パス式にはJSONオブジェクト・ステップのみ含むことができ、JSON配列ステップを含むことはできません。
 - 
                           
文字列。この条件は、配列値を含む一致したJSONオブジェクトのすべての文字列および数値のプロパティ値内の文字列を検索します。文字列は、プロパティ値の個別のワードとして存在する必要があります。たとえば、'beth'を検索すると、文字列のプロパティ値"beth smith"と一致しますが、"elizabeth smith"とは一致しません。'10'を検索すると、数値のプロパティ値10または文字列のプロパティ値"10 main street"と一致しますが、数値のプロパティ値110または文字列のプロパティ値"102 main street"とは一致しません。
 
この条件は、一致する場合にTRUEを戻し、一致しない場合にFALSEを戻します。
                     
関連項目:
JSON_textcontains_condition::=
(JSON_basic_path_expression: Oracle Database JSON開発者ガイドを参照)
                     
column
テストするJSONデータを含む表またはビューの列の名前を指定します。列のデータ型はVARCHAR2、CLOBまたはBLOBである必要があります。JSONデータでの使用に特化して設計されているOracle TextデータであるJSON検索索引を列に定義する必要があります。列の値がnullまたは長さゼロのテキスト・リテラルである場合、この条件はUNKNOWNを戻します。
                     
列の値が厳密な構文または緩い構文を使用した整形式のJSONデータのテキスト・リテラルでない場合、この条件はFALSEを戻します。
                     
JSON_basic_path_expression
この句を使用して、SQL/JSONパス式を指定します。この条件はパス式を使用してcolumnを評価し、パス式と一致する(パス式を満たす)JSON値があるかどうかを判断します。パス式はテキスト・リテラルである必要があります。JSON_basic_path_expressionのセマンティクスの詳細は、Oracle Database JSON開発者ガイドを参照してください。
                     
string
この条件は、stringで指定された文字列を検索します。文字列は一重引用符で囲みます。
                     
例
次の文は、family_doc列を使用した表familiesを作成します。
                     
CREATE TABLE families (family_doc VARCHAR2(200));
次の文は、列family_docのJSON検索索引を作成します。
                     
CREATE INDEX ix
  ON families(family_doc)
  INDEXTYPE IS CTXSYS.CONTEXT
  PARAMETERS ('SECTION GROUP CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)');
次の文は、ファミリを示すJSONドキュメントを列family_docに挿入します。
                     
INSERT INTO families
VALUES ('{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}');
INSERT INTO families
VALUES ('{family : {id:11, ages:[42,40,10,5], address : {street : "200 East Street", apt : 20}}}');
INSERT INTO families
VALUES ('{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}');
次の文は、トランザクションをコミットします。
COMMIT;
次の問合せは、ドキュメントのプロパティ値に10を含むJSONドキュメントを戻します。
                     
SELECT family_doc FROM families
  WHERE JSON_TEXTCONTAINS(family_doc, '$', '10');
FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}
{family : {id:11, ages:[42,40,10,5], address : {street : "200 East Street", apt : 20}}}
{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}
次の問合せは、idのプロパティ値に10を含むJSONドキュメントを戻します。
                     
SELECT family_doc FROM families
  where json_textcontains(family_doc, '$.family.id', '10');
FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}
次の問合せは、agesプロパティの値の配列に10を含むJSONドキュメントを戻します。
                     
SELECT family_doc FROM families
  WHERE JSON_TEXTCONTAINS(family_doc, '$.family.ages', '10');
FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:11, ages:[42,40,10,5], address : {street : "200 East Street", apt : 20}}}
次の問合せは、addressプロパティ値に10を含むJSONドキュメントを戻します。
                     
SELECT family_doc FROM families
  WHERE JSON_TEXTCONTAINS(family_doc, '$.family.address', '10');
FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}
{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}
次の問合せは、aptプロパティ値に10を含むJSONドキュメントを戻します。
                     
SELECT family_doc FROM families
  WHERE JSON_TEXTCONTAINS(family_doc, '$.family.address.apt', '10');
FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}










