处理表插入时更新某个字段
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/
,如需转载,请注明出处,否则将追究法律责任。