触发器after和before

摘要:
--after和beforeCREATEORREPLACETRIGGERdel_emp1BEFOREupdateORinsertORdeleteONscott.empREFERENCINGnewASnnoldASooFOREACHROWWHEN(nn.sal˃2000)BEGINIFINSERTINGTHENdbms_output.put_line('THEOPERATIONISINSERT');
--after和before
CREATE OR REPLACE TRIGGER del_emp1
               BEFORE update OR insert OR delete ON scott.emp
         REFERENCING newAS nn  old AS oo
         FOR EACH ROW
         WHEN (nn.sal > 2000)
BEGIN
         IF INSERTING THEN
            dbms_output.put_line('THE OPERATION IS INSERT');
         ELSIF UPDATING THEN
             dbms_output.put_line('THE OPERATION IS UPDATE');
         ELSIF DELETING THEN
             dbms_output.put_line('THE OPERATION IS DELETE');
         ELSE
             dbms_output.put_line('OTHERS OPERATION');
         END IF;
END;
CREATE OR REPLACE TRIGGER del_emp2
               after update OR insert OR delete ON scott.emp
         REFERENCING newAS nn  old AS oo
         FOR EACH ROW
         WHEN (nn.sal > 2000)
BEGIN
         IF INSERTING THEN
            dbms_output.put_line('THE OPERATION IS INSERT');
         ELSIF UPDATING THEN
             dbms_output.put_line('THE OPERATION IS UPDATE');
         ELSIF DELETING THEN
             dbms_output.put_line('THE OPERATION IS DELETE');
         ELSE
             dbms_output.put_line('OTHERS OPERATION');
         END IF;
END;
update emp set sal=7000 where emp.ename='SMITH';
--after和before的区别是:before是先执行begin后触发触发器,after是先执行触发器而后执行begin内容.
CREATE OR REPLACE TRIGGER check_emp
               BEFORE update OR insert OR delete ON scott.emp
         REFERENCING newAS nn old AS oo
         FOR EACH ROW
         /*WHEN (nn.sal < 2000)*/BEGIN
         IF INSERTING THEN
            dbms_output.put_line('THE OPERATION IS INSERT');
         ELSIF UPDATING THEN
             dbms_output.put_line('THE OPERATION IS UPDATE');
         ELSIF DELETING THEN
             dbms_output.put_line('THE OPERATION IS DELETE');
         ELSE
             dbms_output.put_line('OTHERS OPERATION');
         END IF;
END;
select *from emp;
begin  
       savepoint s1;
       delete emp where sal=4000;
       rollback to s1;
end;

       

免责声明:文章转载自《触发器after和before》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于webpack打包js和css第1周:指针与字符串下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

转:SQLServer级联删除示例

SQLServer 2000与Oracle 8i相比较,在级联删除上有太多的限制 表内自关联不支持级联删除和级联更新 一个表内在有多个列同时关联于另一个表时,不支持多个级联删除 还有什么循环级联删除限制,等等 ....... 一大堆限制,如果要迁移Oracle到SqlServer麻烦多多,特别对于用于构造树型结构的表内自关联(比如部门表)的级联...

STM32CubeIDE+FreeRTOS消息队列实验

新建工程RTOS_Message,配置如下: Ctrl + S生成代码 修改代码, 1,在main.h中添加 //添加include/*Private includes ----------------------------------------------------------*/ /*USER CODE BEGIN Includes */#in...

Delphi调用IE打开网页

//调用相应程序打开   uses ShellAPI;   procedure TForm1.Button1Click(Sender: TObject);   begin   //用IE打开   ShellExecute(Handle, 'open', 'IExplore.EXE', 'about:blank', nil, SW_SHOWNORMAL);...

ubuntu安装软件依赖解决

sudo apt-get install -f zsh@zsh:~/Downloads/dist$ sudo dpkg --install Kitematic_0.17.3_amd64.deb (正在读取数据库 ... 系统当前共安装有 280899 个文件和目录。)正准备解包 Kitematic_0.17.3_amd64.deb ...正在将 kitem...

触发器不能读它的问题

http://space.itpub.net/7728585/viewspace-718992 报错如下: SQL> update GPPAYMENTFUND set attribute5='1' where fundapplyno ='20120314500102010001';update GPPAYMENTFUND set attribute5...

L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法

vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来 为这个数找一个应该插入到vector的位置。另外再找一个数组来维护插入数的顺序,来面对pop操作 在从小到大的排序数组中, lower_bound( begin,end,num):从数组的begin位置到end-1位置...