GraphQL変数

変数によって、問合せが汎用的で再利用可能になります。問合せで値をハード・コーディングするかわりに、変数を使用すると、値を個別に渡すことができます。

Oracle AI DatabaseでのGraphQL変数のサポートは、次の操作によって提供されます:
  • $」記号を使用して、GraphQL表関数で変数を定義します。たとえば、GraphQL問合せのrace (name: $var)は、実行中にレース名が変数として渡されることを意味します。
  • バインド変数を定義します。キーワードpassingを使用して、定義されたGraphQL変数に値を割り当てます。

特定のレースに関する情報を取得するシナリオについて考えてみます。GraphQL引数を使用してこれを行うこともできますが、変数を使用すると問合せの汎用性が向上し、入力問合せをハードコードする必要がなくなります。

最初にバインド変数を定義して、EXEC SELECT文を実行し、GraphQL問合せのpassing句で使用します。

VAR race_name_bind VARCHAR2;
EXEC SELECT 'Miami Grand Prix' INTO :race_name_bind;

次に、変数の値(この場合は「Miami Grand Prix」)を次の例の変数varに渡します:

例3-15 OracleでサポートされているGraphQL問合せでの1つの変数の受渡し


-- Get the result for the race specified by the bind variable :race_name_bind
SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    race (name: $var) {
        id: race_id
        name
        date: race_date
        podium
    }
' PASSING :race_name_bind AS "var");
この例を実行すると、レースの名前が「Miami Grand Prix」であるレースの要求された詳細が生成されます。
DATA                                                                           
--------------------------------------------------------------------------------
{                                                                              
  "id" : 206,                                                                  
  "name" : "Miami Grand Prix",                                                 
  "date" : "2024-05-05T00:00:00",                                              
  "podium" :                                                                   
  {                                                                            
    "winner" :                                                                 
    {                                                                          
      "name" : "Lando Norris",                                                 
      "time" : "1:31:45"                                                       
    },                                                                         
    "firstRunnerUp" :                                                          
    {                                                                          
      "name" : "Max Verstappen",                                               
      "time" : "1:32:02"                                                       
    },                                                                         
    "secondRunnerUp" :                                                         
    {                                                                          
      "name" : "Carlos Sainz Jr.",                                             
      "time" : "1:32:16"                                                       
    }                                                                          
  }                                                                            
}                                                                              
                                                                                 
 
1 row selected.
_or QBE演算子を使用して複数の変数を結合する別の例を次に示します。この例では、変数$raceName または$raceDateを選択し、実行中に渡される変数に応じて出力をフィルタリングします。バインディング変数として日付を定義して渡すシナリオについて考えてみます:
 
VAR race_date_bind VARCHAR2;
EXEC SELECT '2024-07-07' INTO :race_date_bind;

例3-16 _or QBE演算子を使用した複数の変数の結合

SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    race (
        check: {
            _or: [
                {name: $raceName},
                {date: $raceDate}
            ]
        }
    ) {
        id: race_id
        name
        date: race_date
        podium
    }
' PASSING :race_name_bind AS "raceName",
          to_date(:race_date_bind, 'YYYY-MM-DD') AS "raceDate");

このコードは指定された日付を渡し、指定された日付に対応するレースの要求された詳細を生成します。

DATA                                                                           
--------------------------------------------------------------------------------
{                                                                              
  "id" : 206,                                                                  
  "name" : "Miami Grand Prix",                             
  "date" : "2024-05-05T00:00:00",                                                                        
...................
...................              
}                                                                              
                                                                                 
{                                                                              
  "id" : 212,                                                                  
  "name" : "British Grand Prix",                                               
  "date" : "2024-07-07T00:00:00",                                              
  "podium" :                                                                   
  {                                                                            
    "winner" :                                                                 
    {                                                                          
      "name" : "Lewis Hamilton",                                               
      "time" : "1:32:20"                                                       
    },                                                                         
    "firstRunnerUp" :                                                          
    {                                                                          
      "name" : "Lando Norris",                                                 
      "time" : "1:32:39"                                                       
    },                                                                         
    "secondRunnerUp" :                                                         
    {                                                                          
      "name" : "George Russell",                                               
      "time" : "1:32:52"                                                       
    }                                                                          
  }                                                                            
}                                                                              
                                                                                 
 
2 rows selected.