孟子辰
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會話中建立和示例一 個簡...