Oracle表級觸發器語句

2021-07-25 08:32:23 字數 3146 閱讀 9309

孟子辰

2016-12-04 06:22 示例

一、只有在每個月的10日才允許辦理,新員工入職與離職,其他時間不允許增加和刪除員工資料

--建立表

create table myemp as select * from emp;

--建立觸發器

create or replace trigger changemyemp_trigger

before insert or delete on myemp

declare

v_curdate varchar2(20);

begin

select to_char(sysdate,'dd') into v_curdate from dual;

if trim(v_curdate)<>'10' then

end if;

end changemyemp_trigger;

--向表中增加或者刪除資料

declare

begin

-- insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(8888,'test','clerk',7369,sysdate,8000,null,10);

delete from myemp where empno=7369;

exception

when others then

dbms_output.put_line(sqlerrm);

end;

示例二、週末及每天下班時間(每天9:00以前,18:00以後)不允許更新myemp表

--建立觸發器

create or replace trigger changemyemp_trigger

before insert or delete on myemp

declare

v_curhour varchar2(20);

v_week varchar2(20);

begin

select to_char(sysdate,'day'),to_char(sysdate,'hh24') into v_week,v_curhour from dual;

if trim(v_week) in('星期六','星期日') then

elsif trim(v_curhour)<'9'or trim(v_curhour)>'18' then

end if;

end changemyemp_trigger;

--向表中增加或者刪除資料

declare

begin

-- insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(8888,'test','clerk',7369,sysdate,8000,null,10);

delete from myemp where empno=7369;

exception

when others then

dbms_output.put_line(sqlerrm);

end;

--示例

三、每乙個員工都在根基本工資收入繳稅,2000以下3%,2000~5000,8%,5000以上10%,

--要求建立一張新的表來存放,員工編號,姓名,工資佣金,上繳的稅,並且每次在修改員工表中的sal和comm欄位後自動更新記錄

--建立myemp_tax表

create table myemp_tax(

empno number(4),

ename varchar2(10),

sal number(7,2),

comm number(7,2),

tax number(7,2),

constraint pk_myempno primary key(empno),

constraint fk_myempno foreign key(empno) references myemp(empno) on delete cascade

--建立觸發器

create or replace trigger myemp_out

after insert or update or delete on myemp

declare

pragma autonomous_transaction; --觸發器自主事務

cursor cur_myemp is select * from myemp; --定義游標找到每行的記錄

v_sal myemp.sal%type; --定義變數計算收入

v_myemptax myemp_tax.tax%type; --稅收

v_myemp myemp%rowtype;

begin

delete from myemp_tax; --清空myemp_tax表;

for v_myemp in cur_myemp loop

v_sal:=v_myemp.sal+nvl(v_myemp.comm,0); --計算總工資

if v_sal<2000 then

v_myemptax:=v_sal*0.03; --上繳稅3%

elsif v_sal between 2000 and 5000 then

v_myemptax:=v_sal*0.08; --上繳稅8%

elsif v_sal>5000 then

v_myemptax:=v_sal*0.1; --上繳稅10%

end if;

insert into myemp_tax(empno,ename,sal,comm,tax)

values(v_myemp.empno,v_myemp.ename,v_myemp.sal,v_myemp.comm,v_myemptax);

end loop;

commit;

end myemp_out;

--向myemp表中增加一條的記錄,然後查詢myemp_tax表

insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(8898,'test','clerk',7369,sysdate,800,100,10);

select * from myemp_tax;

ORACLE觸發器 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...

Oracle觸發器介紹 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸 髮器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例一 個簡...

Oracle觸發器介紹 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸 髮器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例一 個簡...