• 技术文章 >数据库 >Oracle

    oracle触发器的写法是什么

    长期闲置长期闲置2022-01-25 12:07:20原创74

    在oracle中,触发器是在指定条件成立时,会自动执行定义的语句,写法为“create [or replace] tigger 触发器名 触发时间 触发事件 on 表名[for each row]begin pl/sql语句 end”。

    本教程操作环境:Windows10系统、Oracle 11g版、Dell G3电脑。

    oracle触发器的写法是什么

    一、触发器简介

    触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。

    因此触发器不需要人为的去调用,也不能调用。

    然后,触发器的触发条件其实在你定义的时候就已经设定好了。

    这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。

    详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。

    具体举例:

    1、 在一个表中定义的语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个就是删除表的操作就是触发器执行的条件了。

    2、 在一个表中定义了行级的触发器,那当这个表中一行数据发生变化的时候,比如删除了一行记录,那触发器也会被自动执行了。

    二、触发器语法

    触发器的语法:

    create [or replace] tigger 触发器名 触发时间 触发事件
    on 表名
    [for each row]
    begin
     pl/sql语句
    end

    其中:

    触发器能实现如下功能:

    功能:

    1、 允许/限制对表的修改

    2、 自动生成派生列,比如自增字段

    3、 强制数据一致性

    4、 提供审计和日志记录

    5、 防止无效的事务处理

    6、 启用复杂的业务逻辑

    举例

    1)、下面的触发器在更新表tb_emp之前触发,目的是不允许在周末修改表:

    create or replace trigger auth_secure before insert or update or DELETE
    on tb_emp
    begin
      IF(to_char(sysdate,'DY')='星期日') THEN
        RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp');
      END IF;
    END;
    /

    2)、使用触发器实现序号自增

    创建一个测试表:

    create table tab_user(
      id number(11) primary key,
      username varchar(50),
      password varchar(50)
    );

    创建一个序列:

    复制代码 代码如下:

    create sequence my_seq increment by 1 start with 1 nomaxvalue nocycle cache 20;

    创建一个触发器:

    CREATE OR REPLACE TRIGGER MY_TGR
     BEFORE INSERT ON TAB_USER
     FOR EACH ROW--对表的每一行触发器执行一次
    DECLARE
     NEXT_ID NUMBER;
    BEGIN
     SELECT MY_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL;
     :NEW.ID := NEXT_ID; --:NEW表示新插入的那条记录
    END;

    向表插入数据:

    insert into tab_user(username,password) values('admin','admin');
    insert into tab_user(username,password) values('fgz','fgz');
    insert into tab_user(username,password) values('test','test');
    COMMIT;

    查询表结果:SELECT * FROM TAB_USER;

    推荐教程:《Oracle视频教程

    以上就是oracle触发器的写法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:oracle
    上一篇:oracle中and和or的区别是什么 下一篇:oracle的转义字符是什么

    相关文章推荐

    • oracle怎样修改sga• oracle模糊查询语句是什么• oracle怎样查询前10条记录• oracle怎样行列转置• 怎样关闭oracle数据库

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网