GRAPHQL表ファンクション

graphql_string_value::=

graphql_comment::=

graphql_object_name::=

graphql_anyname::=

graphql_quoted_name::=

graphql_qbe_clause::=

graphql_qbe_argument_list::=

graphql_qbe_argument_list_continue::=

graphql_qbe_equality_argument::=

graphql_qbe_relational_argument::=

graphql_qbe_logical_argument::=

graphql_qbe_logical_argument_list::=

graphql_qbe_logical_argument_list_continue

graphql_qbe_item_operator_argument::=

graphql_qbe_item_operator_list::=

graphql_qbe_item_operator_list_continue::=

graphql_qbe_operator_name::=

graphql_field_arguments::=

graphql_field_argument_list::=

graphql_field_argument_list_continue::=

graphql_field_argument::=

graphql_variable_name::=

graphql_selection_set::=

graphql_selection::=

graphql_field_name::=

graphql_directives::=

graphql_directive::=

graphql_directive_arguments::=

graphql_directive_argument_list::=

graphql_directive_argument_list_continue::=

graphql_directive_argument::=

graphql_directive_argument_name::=

graphql_directive_argument_value::=

graphql_any_value::=

graphql_list_value::=

graphql_list_value_continue::=

graphql_passing_clause::=

graphql_variable_list::=

graphql_variable_list_continue::=

graphql_variable_identifier::=

目的

GRAPHQL表ファンクションは、データベース表を問い合せてJSONドキュメントの形式で結果を取得するために使用できるSQL表ファンクションです。

GRAPHQL表ファンクションは、文字列リテラルとして渡される埋込みGraphQL問合せを評価します。このファンクションは、参照されるオブジェクトのJSONリレーショナル二面性マッピングと一致する、GraphQL選択セットから導出された行を戻します。

このファンクションは、SELECT文のFROM句でのみ使用できます。

ノート:

空白およびコメントは、graphql_query句の任意の場所で使用できます。

セマンティクス

graphql_query

ファンクションgraphql_queryへの入力は、問い合せるオブジェクトおよびフィールドの構造化された表現および階層表現です。

ファンクションの出力は、graphql_queryに対応する一連のJSONドキュメントで構成されるJSON型の単一列です。

graphql_passing_clause

存在する場合、graphql_passing_clauseは、graphql_field_argumentsまたはQBEで使用される変数バインディングを提供します。キーワードPASSINGで始まり、その後にSQL式、リテラルまたはバインド変数へのGraphQL変数のマッピングが続きます。

  • graphql_object_nameは、完全修飾名(schema_name.table_nametable_name.column_nameなど)を指します。

  • graphql_field_argumentsは、結果セットを制限する一連の述語を指します。これらの述語は、フィールド値を指定されたリテラル(またはGraphQL表ファンクションの変数)と比較します。複数の引数が存在する場合、それらは結合的に結合されます(論理AND)。各graphqlフィールドの引数は、名前と値のペアまたは名前と変数のペアです。

    引数のリストはカッコで囲む必要があります。

    GraphQL表の変数は、最初の文字として'$'記号によって識別されます。

graphql_selection_set

graphql_selection_setは、現在のオブジェクトから投影するフィールドを宣言します。

graphql_fieldは、基礎となるリレーショナル・オブジェクト(列または表)をJSONフィールドにマップします。

オプションの引数graphql_aliasは、出力キー名を変更します。

オプションの引数graphql_directivesは、フィールドがどのように解決されるか、または二面性ビューのメタデータにどのように影響するかを変更します。

オプションのネストされたgraphql_selection_setは、ネストされたオブジェクトに投影されるフィールドを宣言します。

graphql_field_nameには、表または列の名前、あるいは数値リテラルを指定できます。

graphql_aliasは、選択したフィールドの出力キーの名前を変更します。基礎となるフィールド検索では、graphql_field_nameを使用します。出力にはgraphql_aliasが使用されます。

graphql_qbe_clause

graphql_qbe_clauseを使用して、GraphQL問合せのフィールドに述語を含めることでJSONドキュメントをフィルタします。等価演算子、関係演算子、論理演算子および項目レベルの演算子を表現できます。

graphql_qbe_clauseはカッコで囲まれ、CHECKキーワードで始まり、その後に中カッコ内のコロンとQBE引数のリストが続きます。

qbe_equality_argumentは、フィールド・レベルの等価述語です。フィールドが指定されたリテラル変数またはバインド変数と等しい場合にtrueと評価されます。

qbe_relational_argumentは、フィールド・レベルのリレーショナル述語です。QBE演算子は比較を指し、指定されたフィールドおよび指定されたオペランドに適用されます。

qbe_logical_argumentは、論理構成(ANDORなど)を指します。演算子は、現在の有効範囲に対して評価される真理値表に従って、囲まれた引数リストを結合します。ネストされた論理句も使用できます。

qbe_item_operator_argumentは、フィールドの値と比較する前にフィールドに対してなんらかの変換を実行するために使用できるQBE項目演算子を指します。

graphql_directives

ディレクティブは、フィールドまたは選択セットに適用されるメタデータ駆動修飾子で、@directive_name(directive_arguments)として書き込まれます。各graphql_directive_argumentgraphql_directive_argument_name: graphql_directive_argument_valueとして書き込まれます。これらは、条件付き包含、レスポンスの形状、計算された変換、アクセスおよび可変性などの動作を制御します。ディレクティブの引数は、名前と値のペアです。値は、名前、文字列、数値または値リストです。

GraphQL式のコメント

GraphQL式では、コメントを1行で指定できます。GraphQL標準に従って、1行のコメントの前にハッシュ(#)記号が付きます。

GraphQL式を含む問合せでSQLコメントを指定することもできます。1行のSQLコメントの前に二重ダッシュ(--)が付きます。複数の行にわたるSQLコメントは、"/*"および"*/"で囲みます。

ルール

  • SQLコメントは問合せの任意の場所に配置できますが、GraphQLコメントはGraphQL式内でのみ有効です。

  • これらのコメントはDDLに保持されます。つまり、DBMS_METADATA.GET_DDLを使用してビュー作成DDLをフェッチすると、これらのコメントが出力に表示されます。

  • GraphQL表ファンクションで提供されるGraphQL式では、単一行のGraphQLスタイル・コメント(#で始まるコメント)のみが許可されます。

例: 有効なコメント

  CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW student_ov AS 
    student { # this is a valid single line GraphQL comment
    _id: stuid
    Name: name
    -- SQL comments can be placed within GraphQL expression as well
};

GraphQL問合せを使用したDBの問合せ

  
  SELECT * FROM GRAPHQL
('
    employees {
		  _id: employee_id
		  Name: first_name
	       }
');

出力は次のとおりです:

{
  "_id" : 174,
  "Name" : "Ellen"
}

{
  "_id" : 166,
  "Name" : "Sundar"
}

{
  "_id" : 130,
  "Name" : "Mozhe"
}

{
  "_id" : 105,
  "Name" : "David"
}

GraphQLの詳細は、宣言型GraphQL開発者ガイドを参照してください。