会議でプレゼンテーションを行った後、PL/SQLを教えている大学の講師とおしゃべりをしました。私の話はPL/SQLのグッドプラクティスについてでした。私のスライドの1つは、単に「トリガーを使用しないでください」と言っていました。講師は、そのようなアドバイスをカリキュラムのニーズと調和させるのは難しいと私に言った。彼らは生徒にすべての構文を教える必要がありますが、ソフトウェアを専門的に作成するときに使用しないソリューションを必要とするタスクを設定することがよくあることを彼は認めました。
これはそのような質問です。正しいアプローチは、ゴードンの答えが示すように チェック制約を使用することです。 。制約はより効率的で、慣用的でもあります。しかし、先生はあなたにトリガーを書いてほしいと言っているので、ここにあなたのコードが修正されています。
CREATE OR REPLACE TRIGGER CheckAdvance
BEFORE INSERT OR UPDATE OF advance ON titles
FOR EACH ROW
BEGIN
IF (:new.advance < 0
OR :new.advance > 100)
THEN
raise_application_error(-20000
, 'Advance cannot be less than zero or greater than one hundred.');
END IF;
END;
注意点:
- CREATE OR REPLACEは、予備のDROPステートメントなしでトリガーコードを変更できることを意味します。
- トリガー本体などのコードのBEGINおよびENDフレームブロック。
- 静的条件文はIF...ENDIFキーワードで囲まれています。 WHENは、ループ構造を終了するためのものです。
- :NEW(および:OLD)キーワードを使用してテーブルの列の値を参照します-コロンに注意してください。
- RAISE_APPLICATION_ERRORを使用して例外をスローします。エラー番号は、Oracleがユーザー定義の例外用に予約している-20999〜-20000の範囲内である必要があります。
- エラーメッセージを意味のあるものにする:ユーザーに推測させるのではなく、何が間違っていたかをユーザーに伝えます。
- インデントを使用してコードを読みやすくする方法を学びます。あなたの将来の同僚はそれをあなたに感謝するでしょう。