JSONリレーショナル二面性ビューのQBE
Oracle AI Databaseでは、GraphQLのQuery-By-Example (QBE)は、明示的な述語ロジックではなく、例の値を指定することで、問合せ内でフィルタを指定するメカニズムを提供します。
QBEを使用すると、ユーザーは馴染みのあるフィールドと値のペアを使用して選択基準を作成できます。この選択基準はシステムで自動的に解釈され、SQLのWHERE句と同様に適切なフィルタリング操作に変換されます。
OracleのGraphQL実装では、QBE式はcheck句を介して提供されます。各述語は、フィールド(列の別名)、QBE演算子(_eq、_lt、_likeなど)および対応する比較値の指定により形成されます。この設計により、等価性、比較、パターン一致、nullチェックなどの幅広い条件の式に加え、_andや_orなどの演算子を使用した論理的な組合せも可能になります。
ノート:
Oracle Database Support for GraphQLの問合せは、リレーショナル、論理および項目メソッドのQBE演算子の包括的なセットを提供します。サポートされているGraphQL QBE演算子の完全なリストおよび詳細な例は、Oracle Database Support for GraphQL開発者ガイドのOracleのGraphQL QBEを参照してください。このトピックで示す例は、JSONリレーショナル二面性ビューに関連するシナリオに特に焦点を当てています。
ここでは、check句内で_eq QBE演算子を使用して、teamの名前がFerrariと等しいことを確認する例を示します:
例9-9 二面性ビュー作成構文でのGraphQL _eq QBE演算子の使用
CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW team_ferrari_dv AS
team (check: {
name: {_eq: "Ferrari"}
}) @insert @update @delete {
_id: team_id
name: name
points: points
driver: driver @insert @update {
driverId: driver_id
name: name
points: points
}
};
次に、二面性ビュー作成構文を使用した_gt (より大きい) QBE演算子の使用を示す別の例を示します:
例9-10 二面性ビュー作成構文でのGraphQL _gt QBE演算子の使用
CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW valid_race_dv AS
race (check: {
laps: {_gt: 50}
}) @insert @update @delete {
_id: race_id
name: name
laps: laps
date: race_date
podium: podium
};
_gt:50 QBE演算子で除外されるため含まれません。前述の二面性ビュー作成構文でcheckオプションが有効になっているため、次のDMLはQBEで指定された条件に厳密に従います。たとえば、二面性ビューvalid_race_dvへの次の挿入は、check句のQBE演算子で指定されているように、lapsフィールドが55より大きいため有効です:INSERT INTO valid_race_dv VALUES ('
{
"_id" : 204,
"name" : "Miami Grand Prix",
"laps" : 55,
"date" : "2022-04-16T00:00:00",
"podium" : {}
}
');
UPDATE valid_race_dv dv SET data = JSON('
{
"_id" : 204,
"name" : "Miami Grand Prix",
"laps" : 49,
"date" : "2022-04-16T00:00:00",
"podium" : {}
}
') WHERE dv.data."_id" = 204;*
ERROR at line 1:
ORA-42692: Cannot update JSON Relational Duality View 'F1_DV'.'VALID_RACE_DV':
Error while updating table 'RACE'
ORA-01402: view WITH CHECK OPTION where-clause violation 論理QBE演算子_andを使用して、複数の条件を組合せできます。次の例では、有効なレースを格納する二面性ビューを作成します(laps>=51かつlaps<=57):
例9-11 二面性ビュー作成構文でのGraphQL _およびQBE演算子の使用
CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW valid_race_dv AS
race (check: {
_and: [
{laps: {_gte: 51}},
{laps: {_lte: 57}}
]
}) {
_id: race_id
name
laps
date: race_date
podium
};