ITPub博客

首页 > 数据库 > Oracle > oracle触发器更新当前插入行实例

oracle触发器更新当前插入行实例

Oracle 作者:basketballgod 时间:2013-09-14 14:50:10 0 删除 编辑
处理表插入时更新某个字段

create or replace trigger tr_insert_webinfo
  before insert on web_info  --插入前触发
  for each row  --行级触发器
declare
  v_rowsid varchar2(20);--默认
  v_max_rowsid varchar2(20);--最大
begin
  --给变量赋值
  select to_char(sysdate,'yyyymmdd')||'0001' into v_rowsid from dual;
  select max(t.webcode+1) into v_max_rowsid from web_info t where t.webcode like ''''||to_char(sysdate,'yyyymmdd')||'%''';
  --输出变量的值
  dbms_output.put_line(v_rowsid);
  dbms_output.put_line(v_max_rowsid);
  --更新需要变更的列
  if :new.webcode is null then
      if v_max_rowsid is null then
          :new.webcode:=v_rowsid;
      else
          :new.webcode:=v_max_rowsid;
      end if;
  end if;
end tr_insert_webinfo;

编写触发器时,需要注意以下几点:

1、触发器不接受参数。

2、一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。

3、在一个表上的触发器越多,对在该表上的DML操作的性能影响就越大。

4、触发器最大为32KB。若确实需要,可以先建立过程,然后在触发器中用CALL语句进行调用。

5、在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)。

6、触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。

7、在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。

8、在触发器主体中不能申明任何Long和blob变量。新值new和旧值old也不能向表中的任何long和blob列。

9、不同类型的触发器(如DML触发器、INSTEAD OF触发器、系统触发器)的语法格式和作用有较大区别。

--限制修改某张表
RAISE_APPLICATION_ERROR(-20001, '不是上班时间,不能修改dual表')
<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23804734/viewspace-1116897/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-04-27