对触发器不了解,因此引发了一个工作中的错误!
个人的理解,触发器 就是,数据库中指定的内容发生某种事件时候,就会被触发的一个对象,来完成特定的事情。
比如,修改表中某一个字段的值,一个表被删除,数据库重启等,针对这些事件,都可以为他们定义上一个触发器。
如果我们在表中的一列定义上了触发器,那么这列的值就不再受其他程序控制,而是按自己的定义的处理方式执行。
在开发的时候,用到系统以前沿用的开发模式,我也不知道查看是不是这一列定义了触发器,因此,在通过序列获取值的时候,我先测试直接在INSERT语句中,传入'GLD_book_SEQ.nextval' 的字符串形式会怎样。结果,能填入响应的序列值。不用先通过
SELECT GLD_book_SEQ.nextval FROM dual
获取序列号,就能填入序列号,我理解成是不是底层做了处理,就传入了,序列对应的字符串。
然而给别人的时候,别人那里确实填入的 传入的字符串,经查看,发现是被改变值的那一列定义上了一个insert的触发器,而根据自己的规则填入。郁闷。
create or replace trigger tri_GLD_PERIOD_FIN_DEFINE
before insert on GLD_PERIOD_FIN_DEFINE
for each row
declare
nextid number;
begin
select GLD_fin_SEQ.nextval
into nextid
from dual;
:new.keycode:=nextid;
end tri_GLD_PERIOD_FIN_DEFINE ;
查看数据表中是不是定义了触发器的SQL
select *
from user_triggers
where table_owner = 'SERP8231'
and table_name = upper('gld_period_fin_define');
这里的table_owner是对应的用户名。 table_name对应的是表名。
网上找的系统讲解: