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条件を使用して、式が構文的に正しい整形式の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_args::=
-
expr
は、評価の対象となるJSONデータを指定するために使用します。テキスト・リテラルを評価する式を指定します。expr
が列である場合、列のデータ型はVARCHAR2
、CLOB
またはBLOB
のいずれかである必要があります。expr
がnullまたは長さゼロのテキスト・リテラルを評価する場合、この条件はUNKNOWN
を戻します。 -
expr
がデータ・タイプBLOB
の列の場合、FORMAT
JSON
を指定する必要があります。 -
STRICT
を指定すると、この条件は厳密なJSON構文のみを整形式のJSONデータとみなします。LAX
を指定すると、この条件は緩いJSON構文のみを整形式のJSONデータとみなします。デフォルトはLAX
です。厳密なJSON構文および緩いJSON構文の詳細は、Oracle Database JSON開発者ガイドを参照してください。 -
WITH
UNIQUE
KEYS
を指定すると、キー名が各オブジェクト内で一意である場合のみ、この条件は整形式のJSONデータとみなします。WITHOUT
UNIQUE
KEYS
を指定すると、キー名がオブジェクト内で重複する場合、この条件は整形式のJSONデータとみなします。WITHOUT
UNIQUE
KEYS
テストは、WITH
UNIQUE
KEYS
テストより高速に実行されます。デフォルトはWITHOUT
UNIQUE
KEYS
です。 -
データが指定のJSONスキーマに関して有効であることもテストするには、オプションのキーワード
VALIDATE
を指定します。
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) violated
WHERE句での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データでない場合にこの条件で戻される値を指定します。
次の句を指定できます。
-
ERROR
ON
ERROR
-expr
が整形式のJSONデータでない場合、適切なOracleエラーを戻します。 -
TRUE
ON
ERROR
-expr
が整形式のJSONデータでない場合にTRUE
を戻します。 -
FALSE
ON
ERROR
-expr
が整形式のJSONデータでない場合にFALSE
を戻します。これはデフォルトです。
JSON_exists_on_empty_clause
この句を使用して、JSONデータがSQL/JSONパス式を使用して評価されるときに一致が見つからない場合にこのファンクションで戻される値を指定します。
次の句を指定できます。
-
ERROR
ON
EMPTY
-expr
が整形式のJSONデータでない場合、適切なOracleエラーを戻します。 -
TRUE
ON
EMPTY
-expr
が整形式のJSONデータでない場合にTRUE
を戻します。 -
FALSE
ON
EMPTY
- 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}}}