資料庫觸發器是乙個與表相關聯的、儲存的pl/sql程式。每當乙個特定的資料操作語句(insert,update,delete)在指定表上發出時,oracle自定地執行觸發器中定義的語句序列。
簡單的來說就當某個條件成立的時候,觸發器裡面所定義的語句就會被自動的執行,因此觸發器不需要人為的去呼叫,也不能呼叫。
員工漲薪後工資不能少於漲薪前工資
禁止在非工作時間插入新員工
create [or replace] trigger 觸發器的名稱
before | after
insert | update | delete
on 表名
[for each row] --對錶的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次
declare
變數名稱 變數型別;
begin
pl/sql語句;
end;
--資料校驗, 星期六工作人員休息, 不能辦理新員工入職
--在插入資料之前
--判斷當前日期是否是週六
--如果是週六,就不能插入
create or replace trigger tri_test
before
insert
on emp
declare
--宣告變數
vday varchar2(10);
begin
--查詢當前
select trim(to_char(sysdate,'day')) into vday from dual;
--判斷當前日期:
if vday = 'saturday' then
dbms_output.put_line('工作人員休息,不能辦理入職');
--丟擲系統異常
end if;
end;
:old代表舊的記錄, 更新前的記錄,:new代表的是新的記錄
--判斷員工漲工資後的工資一定要大於漲工資前的工資
/* 200 --> 100
觸發器 : before
舊的工資
新的工資
如果舊的工資大於新的工資 , 丟擲異常,不讓它執行成功
觸發器中不能提交事務,也不能回滾事務
*/create or replace trigger tri_updatesal
before
update
on emp
for each row
declare
begin
if :old.sal > :new.sal then
end if;
end;
--建立序列
create sequence seq_person_pid;
--觸發器,實現自動完成主鍵自增
create or replace trigger tri_add_person_pid
before
insert
on person
for each row
declare
begin
dbms_output.put_line(:new.pname);
--給新記錄 pid 賦值
select seq_person_pid.nextval into :new.pid from dual;
end;
oracle之觸發器
1 oracle中觸發器是當進行操作時觸發事情,進行處理。例如進行對資料表進行插入 更新和刪除時進行觸發事情處理。定義觸發器的是 create or replace trigger before after insert update delete on 資料庫表名 for each row 這是表...
Oracle觸發器之before delete
剛接觸oracle,新建了乙個before delete的觸發器,但老是報 警告 建立的觸發器帶有編譯錯誤 最後發現是觸發器裡面的語句沒有寫分號的原因。下面帖出來,也供新手參考 1.建立表 create table test1 cardid number,name nvarchar2 20 numb...
Oracle學習之觸發器
觸發器,顧名思義,必須由事件觸發 dml事件,ddl事件,資料庫事件 dml 資料操縱語句 insert,update,delete ddl 資料定義語句 create,alter,drop 資料庫事件 startup,shutdown,logon,logoff,servererror 語法 cte...