triggers pl sql tutorial with example programs
PL SQLのトリガー、そのタイプ、使用法、および利点についてすべて学びます。
の中に PLSQLトランザクション のチュートリアル PL / SQLシリーズ 、COMMIT、ROLLBACK、およびSAVEPOINTSステートメントについて学習しました。
この記事では、PL SQLのトリガーとその利点、タイプ、および使用法について説明します。サンプルプログラムを使用して、PL / SQLトリガーを作成、トリガー、有効化、および無効化する方法について説明します。
議論から始めましょう!
学習内容:
PL / SQLのトリガー
デフォルトまたは一部のイベントによって起動されるストアドプログラムは、トリガーと呼ばれます。
以下の状況により、トリガーが実行されます。
- DROP、ALTER、CREATEなどのDDL(データ定義言語)ステートメントによる。
- UPDATE、INSERT、DELETEなどのDML(データ操作言語)ステートメントによる。
- SHUTDOWN、STARTUP、LOGOFF、およびLOGONなどのデータベースアクションによって。
トリガーは、イベントがアタッチされているスキーマ、ビュー、またはデータベースに設定できます。
トリガーの利点
これらは以下のとおりです。
- 参照整合性を適用する機能。
- 監視能力。
- テーブルへのアクセスに関するデータをログに記録して保持する機能。
- 無効なトランザクションを停止する機能。
- セキュリティ機能を実施する機能。
- デフォルトで派生列値を生成する機能。
トリガーの使用法
これらは以下のとおりです。
- 不適切な取引を防ぎます。
- テーブルの使用状況に関する情報を蓄積します。
- 重要な情報を監視します。
PL / SQLのトリガーのタイプ
トリガーは、パラメーターに基づいて分類できます。 トリガーの種類は次のとおりです。
#1)トリガーレベルでの分類。
- ROWレベルトリガー: DMLステートメントによって更新されたレコードごとに実行されます。
- ステートメントレベルトリガー: イベントステートメントによって1回だけ実行されます。
#2)トリガータイミングの分類。
- トリガー前: 発生した特定のイベントの前に実行されます。
- トリガー後: 発生した特定のイベントの後に実行されます。
- トリガーの代わり: これは特殊なタイプのトリガーであり、DMLステートメントによって更新されたレコードごとに実行されます。
#3)トリガーイベントの分類。
- DMLトリガー: UPDATE、INSERT、DELETEなどのDMLイベントが実行されると実行されます。
- DDLトリガー: DROP、ALTER、CREATEなどのDDLイベントが実行されると実行されます。
- データベーストリガー: SHUTDOWN、STARTUP、LOGOFF、LOGONなどのデータベースイベントが発生した場合に実行されます。
トリガーを作成する
トリガーを作成するための構文:
CREATE (OR REPLACE ) TRIGGER trigger_n BEFORE DELETE (OF column_n) ON table_n (REFERENCING OLD AS o NEW AS n) (FOR EACH ROW) WHEN (condition) DECLARE <> BEGIN < > EXCEPTION <> END;
ここに、
- CREATE (OR REPLACE) TRIGGER trigger_n – これは、trigger_nという名前のトリガーを作成、置換、または更新するためのものです。
- 後– これは、トリガーが起動される時間を決定するためのものです。 INSTEAD OFは、ビューを持つトリガーを作成するためのものです。
- 削除– これは、DMLアクションを実行するためのものです。
- (OF column_n) – これは、変更する列名に言及するためのものです。
- (ON table_n) – これは、トリガーに関連付けられているテーブル名に言及するためのものです。
- (古いものを新しいものとして参照する) – これは、UPDATE、INSERT、DELETEなどのDMLステートメントによって古い値と新しい値を参照するためのものです。
- (各行) – これにより、行レベルのトリガーが決定されます。つまり、変更された行ごとにトリガーが起動されます。それ以外の場合、トリガーはSQLステートメントの実行時に1回だけ起動されます。これは、テーブルレベルのトリガーと呼ばれます。
- いつ(状態)– これにより、トリガーが実行される行の条件が与えられます。これは、行レベルのトリガーにのみ適用されます。
名前が付けられたテーブルをもう一度考えてみましょう 学生 。
次に、STUDENTテーブルの行レベルのトリガーを作成します。このトリガーは、そのテーブルでUPDATE、INSERT、DELETEなどのDMLステートメントによって実行されます。トリガーは、現在の値と以前の値の年齢差を計算して表示します。
トリガー作成のコード実装:
CREATE OR REPLACE TRIGGER age_changes BEFORE DELETE OR INSERT OR UPDATE ON student FOR EACH ROW WHEN (NEW.CODE > 0) DECLARE age_diff number; BEGIN age_diff := :NEW.age - :OLD.age; dbms_output.put_line ('Prevoius age: ' || : OLD.age); dbms_output.put_line ('Current age: ' || : NEW.age); dbms_output.put_line ('Age difference: ' || age_diff); END; /
上記のコードの出力:
上記のコードにはいくつかの重要な特徴があります。 それらは以下にリストされています:
- テーブルレベルのトリガーの場合、OLDアドレスとNEWアドレスは使用できません。これらの参照をレコードレベルのトリガーに使用できます。
- 同じトリガーで別のクエリを適用する場合は、前の変更が適切に適用された後でのみテーブルを再度変更できるトリガーとして、キーワードAFTERを使用する必要があります。
- 上記のトリガーは、テーブルに対するDELETE、UPDATE、またはINSERTアクションの前に実行されます。ただし、1回の操作で起動するトリガーを設計することもできます( 例えば、 テーブルでのINSERT操作を使用してレコードが挿入されるたびにトリガーを実行するAFTERINSERT)。
PLSQLでのトリガーのトリガー
上記のトリガーを起動するには、テーブルに対してDELETE、INSERT、UPDATEなどのDML操作を実行する必要があります。 以下のクエリを使用して、Studentテーブルにいくつかの値をもう一度挿入しましょう。
INSERT INTO STUDENT VALUES (4, 'MARY', 16, 97);
StudentテーブルでINSERT操作が完了すると、トリガー age_changes 実行されます。
クエリコードの出力:
新しいレコードが作成され、前の年齢が利用できないため、前の年齢と 年齢差 上記の出力では、計算はnullになります。
さあ、 以下のクエリを使用して、UPDATEステートメントでレコードを変更します。
UPDATE student SET age = age + 1 WHERE code = 7;
StudentテーブルでUPDATE操作が完了すると、トリガー age_changes 実行されます。
上記のクエリの出力:
新旧の条項
new句は、トリガー実行用のテーブルの列の新しい値を格納するために使用されます。これは、レコードレベルのトリガーで使用されます。 old句は、トリガー実行用のテーブルの列の古い値を格納するために使用されます。また、レコードレベルのトリガーでも使用されます。
したがって、newおよびold句は、トリガー本体内の新しい値と古い値を保持および参照するために使用されます。
複合トリガー
複合トリガーは、トリガー本体内のすべてのタイミングポイントの操作を定義するために使用されます。これにより、1つのトリガー本体内で異なるタイミングですべてのアクションをマージすることができます。
さまざまなタイミングポイントを以下に示します。
- ステートメントレベルの後
- 行レベルの前
- 行レベルの後
- ステートメントレベルの前
トリガーの無効化と有効化
DDLステートメントALTERを使用して、トリガーを有効または無効にできます。
構文:
ALTER TRIGGER trigger_n (ENABLE|DISABLE);
ここで、trigger_nは、有効または無効にするトリガーの名前です。
次に、以下のクエリを使用してトリガーを無効にしましょう。
ALTER TRIGGER STUDENT_DETAILS DISABLE;
クエリコードの出力:
次に、以下のクエリを使用して同じトリガーを有効にします。
ALTER TRIGGER STUDENT_DETAILS ENABLE;
クエリコードの出力:
よくある質問と回答
Q#1)PL SQLには何種類のトリガーがありますか?
回答: PL / SQLには2つのタイプのトリガーがあります。これらは、行レベルのトリガーとステートメントレベルのトリガーです。
Q#2)どのタイプのトリガーが新旧の修飾子を使用しますか?
Excelでのテスト概要レポートテンプレート
回答: 古い修飾子と新しい修飾子は、行レベルのトリガーでのみ使用できます。これらは、ステートメントレベルのトリガーとは互換性がありません。
Q#3)新しいトリガーと古いトリガーの違いは何ですか?
回答: 新しいトリガーは、レコードオブジェクトの新しいバージョンのリストを提供します。古いトリガーは、レコードオブジェクトの古いバージョンのリストを提供します。
Q#4)PL SQLの行レベルのトリガーとは何ですか?
回答: 行レベルのトリガーは、イベントが原因で1行に対して1回だけトリガーされます。 例えば、 削除がテーブルのトリガーイベントと見なされる場合、削除ステートメントが2つの行に影響を与えている場合、トリガーは2回起動されます。
Q#5)トリガーとは何ですか?例を挙げて説明します。
回答: トリガーは、データベースでインシデントが発生した場合にデフォルトで起動されるストアドプロシージャです。 例えば、 行がテーブルに挿入された場合、またはテーブルの一部の値を変更している場合。
Q#6)アフタートリガーとは何ですか?
回答: afterトリガーは、DMLステートメントの実行後、データベースへのコミットの前に起動されます。また、アクションをロールバックすることもできます。
結論
このチュートリアルでは、プログラミング中にトリガーを使用するために不可欠なPLSQLのトリガーのいくつかの基本概念について説明しました。以下のトピックについて説明しました。
- トリガー。
- トリガーの種類。
- トリガーに対するさまざまな操作。
<< PREV Tutorial | 次のチュートリアル>>