GraphQLの表関数

26ai以降、SQLを使用したOracle Databaseへのアクセスに加えて、GraphQLを使用してOracle AI Databaseの表を問い合せ、JSONオブジェクトの形式で結果を取得できます。

GraphQL表関数は、データベース表を問い合せるためのSQLの代替手段をユーザーに提供するため、RDBMSへの重要な追加機能として機能します。この関数への入力は、GraphQL問合せを表す文字列で、出力はデータ型JSONの「DATA」という単一の列です。

構文:
select * from graphql('<graphql query>')
すべてのチームの詳細と獲得したポイントを取得する例について考えてみます。GraphQL表関数を使用すると、必要な詳細をデータベースに問い合せることができます。
SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    team {
        id: team_id
        name
        points
    }
'
);
この問合せには、すべてのチームのteam_idnameおよびpointsのみを返すようにサーバーに要求する特定の構造があります。出力には、例1-2で作成した10チームに対応する10個のエントリが含まれています。
DATA                                                                           
--------------------------------------------------------------------------------
{                                                                              
  "id" : 301,                                                                  
  "name" : "McLaren Mercedes",                                                 
  "points" : 666                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 302,                                                                  
  "name" : "Ferrari",                                                          
  "points" : 652                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 303,                                                                  
  "name" : "Red Bull Racing Honda RBPT",                                       
  "points" : 589                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 304,                                                                  
  "name" : "Mercedes",                                                         
  "points" : 468                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 305,                                                                  
  "name" : "Aston Martin Aramco Mercedes",                                     
  "points" : 94                                                                
}                                                                              
                                                                                 
{                                                                              
  "id" : 306,                                                                  
  "name" : "Alpine Renault",                                                   
  "points" : 65                                                                
}                                                                              
                                                                                 
{                                                                              
  "id" : 307,                                                                  
  "name" : "Haas Ferrari",                                                     
  "points" : 58                                                                
}                                                                              
                                                                                 
{                                                                              
  "id" : 308,                                                                  
  "name" : "RB Honda RBPT",                                                    
  "points" : 46                                                                
}                                                                              
                                                                                 
{                                                                              
  "id" : 309,                                                                  
  "name" : "Williams Mercedes",                                                
  "points" : 17                                                                
}                                                                              
                                                                                 
{                                                                              
  "id" : 310,                                                                  
  "name" : "Kick Sauber Ferrari",                                              
  "points" : 4                                                                 
}                                                                              
                                                                                 
 
10 rows selected.

GraphQL表関数では、引用符で囲まれた識別子および完全修飾名もサポートされます。次の問合せ例は、前述の問合せと同等であり、カー・レース・データセットに定義されている10チームに対応する、idnameおよびpointsを含む同じ出力が生成されます。

引用符で囲まれた識別子を使用した問合せ:
SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    team {
        id: "TEAM_ID"
        name
        points
    }
'
);
完全修飾名を使用した問合せ:
SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    team {
        id: team_id
        team.name
        points: team.points
    }
'
);