PREPARATION
受験対策

Silverの例題解説「開発/SQL - SQL コマンド(トリガー)」

「開発/SQL - SQL コマンド(トリガー)」からの出題です。

例題

3.136

データベーストリガーの機能で実現できないものを1つ選びなさい。

  1. あるテーブルに対してSELECT文が実行された日時を記録する。
  2. あるテーブルに対してINSERT文が実行された日時を記録する。
  3. INSERT文の実行時に、特定の列に作成日時を自動的に設定する。
  4. UPDATE文の実行時に、特定の列に最終更新日時を自動的に設定する。
  5. DELETE文の実行時に、特定の行がWHERE句の指定条件にマッチしたとしても削除されないようにする。

※この例題は実際の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事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。