「開発/SQL - SQL コマンド(トリガー)」からの出題です。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2022年2月17日
トリガー(trigger)は『引き金』という意味で、データベースでは何らかの更新を誘引として、別の処理を実行させる仕組みのことを指します。
PostgreSQLではまずTRIGGER型の関数(FUNCTION)を定義し、それをCREATE TRIGGERでテーブルに紐付けることでトリガーを定義します。
トリガーは、大きく分けると、SQL文を実行する前に実行するBEFOREトリガー、SQL文が実行された後に実行するAFTERトリガー、指定されたSQL文の代わりに実行するINSTEAD OFトリガーがあります。BEFORE/AFTERのトリガーについては、SQL文の実行時に一度だけ実行する文レベルのトリガーと、更新の対象となる各行に対して実行する行レベルのトリガーがあります。これをテーブル更新の対象となるINSERT、UPDATE、DELETEに対してそれぞれ定義できます。トリガーはあくまでもテーブルの更新に対して実行されるものなので、SELECTに対してトリガーを定義することはできません。
では、個々の選択肢について考えてみます。
Aですが、SELECTに対してトリガーを定義することはできないので、これはトリガーでは実現できません。なお、ルールを使えば容易に実現可能です。
Bは例えば文レベルのトリガーを定義し、その中で実行日時などを別のテーブルにINSERTすることで実現できます。
CとDはBEFOREトリガーを定義し、その中でそれぞれ作成日時、最終更新日時を設定すれば良いです。
Eは文レベルのBEFOREトリガーを定義し、特定の条件にマッチした行についてはNULLを返すようにすると、その行の処理がスキップされるため、その行についてのみ、DELETEを実行しても削除されないようになります。
間違っているものを選ぶ問題なので、正解はAです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.