oracle 數(shù)據(jù)庫觸發(fā)器可接收參數(shù),增強靈活性。參數(shù)傳遞方式有兩種:1. 直接賦值:在觸發(fā)器定義中聲明參數(shù),在觸發(fā)器代碼中使用名稱訪問;2. 使用 pragma autonomous_transaction:在觸發(fā)器定義中使用 pragma,在觸發(fā)器代碼中使用 autonomous_transaction 功能訪問參數(shù)。
Oracle 數(shù)據(jù)庫觸發(fā)器參數(shù)傳遞
觸發(fā)器可以接收參數(shù),這增強了它們的靈活性,允許根據(jù)特定條件執(zhí)行自定義操作。Oracle 數(shù)據(jù)庫支持通過兩種方式向觸發(fā)器傳遞參數(shù):
方法 1:直接賦值
在觸發(fā)器定義中使用冒號 (:) 聲明觸發(fā)器參數(shù)。
在觸發(fā)器代碼中,使用傳入?yún)?shù)的名稱對其進行訪問。
示例:
<code class="sql">CREATE OR REPLACE TRIGGER my_trigger BEFORE INSERT ON my_table FOR EACH ROW BEGIN :new.my_column := :old.my_column + 1; END;</code>
登錄后復制
方法 2:使用 pragma autonomous_transaction
在觸發(fā)器定義中使用 pragma autonomous_transaction
。
在觸發(fā)器代碼中,使用 autonomous_transaction
功能訪問 PL/SQL 參數(shù)。
示例:
<code class="sql">CREATE OR REPLACE TRIGGER my_trigger PRAGMA AUTONOMOUS_TRANSACTION BEFORE INSERT ON my_table FOR EACH ROW BEGIN autonomous_transaction.new.my_column := autonomous_transaction.old.my_column + 1; END;</code>
登錄后復制
注意事項:
觸發(fā)器參數(shù)只能是 IN 參數(shù)。
傳遞的參數(shù)值在觸發(fā)器執(zhí)行期間保持不變。
在使用 pragma autonomous_transaction 時,觸發(fā)器會在 AUTONOMOUS 事務中運行,與觸發(fā)器調(diào)用的事務隔離。