--=====================觸發器
/*
觸發器:監視器,監視表中記錄,當對錶中記錄進行操作(增刪改)觸發器工作
--行級觸發器:for each row 使用::old, :new
語法:
create or replace trigger 觸發器名稱
after|before
insert|update|delete
on 表名
declare
begin
end;
*/
-- 觸發器監控emp表,當插入一條數據之後,在控制檯輸出:"成功插入數據!"
create or replace trigger tri_emp_after_insert
after
insert
on emp
declare
begin
dbms_output.put_line('成功插入數據!');
end;
--往emp表中插入一條數據
insert into emp (empno,ename) values (8888,'純情小飛飛');
/*
彈框提示函數:
raise_application_error(p1,p2);
p1:錯誤代碼 取值範圍-20001 到 -20999之間
p2:提示信息
*/
--不能給員工降薪
create or replace trigger tri_emp_after_update
after
update
on emp
--行級觸發器
for each row
declare
begin
-- 拿到之前的工資 和 之後工資的進行對比
if :old.sal > :new.sal then
raise_application_error(-20001,'不能給員工降薪!');
end if;
end;
--測試
update emp set sal=sal-1 where empno=7369;
commit;
--===========================觸發器案例:
--使用觸發器實現類型mysql的主鍵自增長效果
-- mysql : insert into emp (ename) values ('abc');
-- 創建序列
create sequence seq_emp_no;
--觸發器
create or replace trigger tri_emp_auto_id
before
insert
on emp
for each row
declare
begin
select seq_emp_no.nextval into :new.empno from dual;
end;
--沒有觸發器之前,報錯的;有了觸發器之後 ? empno 會自動有值
insert into emp (ename) values ('熊大');
commit;
select * from emp;
五、觸發器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.