> 技术文档 > oracle触发器

oracle触发器

每当一个特定的数据操作语句(insert/update/delete)在指定的表上执行时, oracle自动执行相应的触发器

/* 触发器创建语法 */create [or replace] trigger 触发器名before|after /*触发时机,在执行之前还是之后执行触发器*/insert|delete|update [of 字段[,字段,...]] /* 触发事件(of是update事件的可选项)*/on 表名[for each row [when 条件]] /* 行级触发器与语句级触发器的区别 */PL/SQL块/*删除*/drop trigger 触发器名;
  • 触发时机: 触发器何时执行, 取值
        - before: 表示在数据库动作之前执行触发器
        - after: 表示在数据库动作之后执行触发器
  • 触发事件: 指明执行哪些数据库动作时触发此触发器
  • for each row:操作对表每产生一行影响, 触发器就执行一次

-- 创建触发器create or replace trigger user_trgafter insert on tb_testfor each rowbegin dbms_output.put_line(sysdate||\'往tb_test添加了一条数据\')end;-- 触发insert into tb_test(id,name) values(user_seq.nextval,\'admin\');

/* 当用户登录时, 将相关的登录信息存储到用户登录日志表中 */create table login( id number(11), username varchar2(50), iP varchar2(20), login_date date, primary key(id));/* 定义日志表的主键序列 */create sequence seq_login;/* 触发器 */create or replace trigger tr_loginafter logon on databasedeclarebegin insert into login(id, username, ip, login_date) values(seq_login.nextval, ora_login_user, ora_client_ip_address, sysdate);end login;select * from login;/* login: 系统事件, 它不能被绑定到表名视图上, on database ora_login_user: 系统变量, 获取登录用户的用户名 ora_client_ip_address: 系统变量, 用户主机的IP地址*/
部分系统事件 说明 触发时机 startup 数据库实例启动 after shutdown 数据库实例关闭(非正常关闭不会触发) before servererror 数据库服务器发生错误 after logon 登录 after logoff 断开连接 before create 创建 before/after drop 删除 before/after alter 修改 before/after grant 授权 before/after revoke 回收权限 before/after rename 重命名 before/after

程序员网站