文章目录
一、不基于视图的操作
1. 案例1:非工作期间不能插入数据
	create or replace trigger sal_emp
	before insert on emp	--当有多个(before insert or delete or update on emp)
	begin
		if(to_char(sysdate,'dy') not in('星期六','星期日')) then
			raise_application_error(-20001,'非工作期间不能插入数据');
		end if;
	end;
	--测试数据
	insert into emp(empno,ename,job,mgr,hiredate,sal)
	values(1002,'ljs','clerk',7902,sysdate,2000);
2. 案例2:非工作期间不能添加、更新、删除、操作数据
	create or replace trigger sal_emp1
	before insert or update or delete on emp
	begin
		if (to_char(sysdate,'hh24:mi') between '08:00' and '17:00')then
			if inserting then
				raise_application_error(-20001,'非工作期间不能添加数据');
			elsif updating then
				raise_application_error(-20002,'非工作期间不能更新数据');
			elsif deleting then
				raise_application_error(-20003,'非工作期间不能删除数据');
			else
				raise_application_error(-20004,'非工作期间不能操作数据');
			end if;
		end if;
	end;
	--测试数据
	insert into emp(empno,ename,job,mgr,hiredate,sal)
	values(1002,'ljs','clerk',7902,sysdate,2000);
	
	update emp set sal=sal+100
	where empno=1;
	delete from emp where empno=1;
二、基于视图的操作
1. 案例1:改变多张表的数据
	create view my_view
	as
	select e.empno,e.ename,e.job,e.sal,e.deptno,d.dname
	from emp e,dept d
	where e.deptno = d.deptno;
	--测试数据
	insert into my_view values(1005,'ljs','clerk',2000,30,'sales');
		--运行时反生错误原因:同时想要添加数据至两张表中
		--结论:在视图上不能同时改变多张表的数据
	--解决
	create or replace trigger sal_emp2
	instead of insert on my_view
	for each row
	begin
		--添加dept表中的数据
		insert into dept(deptno,dname) values(91,'new');
		--添加emp表中的数据
		insert into emp(empno,ename,job,sal,deptno) values(100,'zs','yf',8000,40);
	end;
2. 案例2:通过聚合函数改变表中数据
	create or replace view empv
	as
	select deptno,max(sal) max_s,min(sal) min_s
	from emp
	group by deptno;
	--测试数据
	update empv set min_s = min_s+500
	where deptno=10;
		--运行时发生错误
		--结论:不能通过聚合函数改变表中数据
	--解决
	create or replace trigger sal_emp
	instead or update on empv
	for each row
	begin
		update emp set sal=sal+500
		where sal=(select min(sal)
				   from emp
				   where deptno=10)
		and deptno = 10;
	end;
                                    来源:CSDN
作者:এ᭄小小常
链接:https://blog.csdn.net/weixin_45721343/article/details/104022518