• oracle 触发器


    Oracle触发器语法:

    Create or  replacetrigger 触发器名   触发时间  触发事件

     On 表名

    for each row //  对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

    Begin

     Pl/sql 语句

    End

    对If  then     end  if 的理解:

      

    语法格式:
    IF    条件1 THEN
    语句序列1;
    ElSIF 条件2 THEN
    语句序列2;
    [
    ELSIF 条件n THEN
      语句序列 n;
    ]
    [
    ELSE
    语句序列 n+1
    ……
    ]
    END IF;
    
    例:取出7369的薪水,如果薪水<1200,则输出'low',如果<2000则输出'middle',否则'high' 
    --注意elsif的写法,then后面没有分号
    --注意最后一个else后面没有then
    --注意end if后面有一个分号
    
    declare
       v_sal   emp.sal%type;
    begin
       select sal into v_sal from emp where empno = 7369;
       if v_sal < 1200    then
          dbms_output.put_line ('salgrade is low');
       elsif v_sal < 2000 then
          dbms_output.put_line ('salgrade is middle');
       else
          dbms_output.put_line ('salgrade is high');
       end if;
    end;
     

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

    create or replace trigger auth_secure before insert or update or DELETE

    on cyq_emp

    begin

      IF(to_char(sysdate,'DY')='星期日') THEN

        RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表cyq_emp');

      END IF;

    END;

    使用触发器实现序号自增

    创建一个测试表:

    create table cyq_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 CYQ_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 cyq_user(username,password) values('admin','admin');

    insert into cyq_user(username,password) values('fgz','fgz');

    insert into cyq_user(username,password) values('test','test');

    COMMIT;

  • 相关阅读:
    洛谷P3258 [JLOI2014]松鼠的新家
    洛谷P1306 斐波那契公约数
    bzoj4247:挂饰
    [YTU]_2354 (H 实现复数类中的加运算符重载【C++运算符重载】)
    [YTU]_2440 (C++习题 复数类--重载运算符+,-,*,/)
    [YTu]_2441 (C++习题 复数类--重载运算符2+)
    [YTu]_2439(C++习题 复数类--重载运算符+)
    10.3 重载双目运算符
    10.2.1 关于vc++不支持把类的成员函数定义为类的友元函数的处理
    10.2 运算符重载函数作为类成员函数和友元函数
  • 原文地址:https://www.cnblogs.com/chaiyingqi/p/8460868.html
Copyright © 2020-2023  润新知