触发器

 对触发器不了解,因此引发了一个工作中的错误!

个人的理解,触发器 就是,数据库中指定的内容发生某种事件时候,就会被触发的一个对象,来完成特定的事情。

比如,修改表中某一个字段的值,一个表被删除,数据库重启等,针对这些事件,都可以为他们定义上一个触发器。

 

如果我们在表中的一列定义上了触发器,那么这列的值就不再受其他程序控制,而是按自己的定义的处理方式执行。

 

在开发的时候,用到系统以前沿用的开发模式,我也不知道查看是不是这一列定义了触发器,因此,在通过序列获取值的时候,我先测试直接在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对应的是表名。

 

网上找的系统讲解:

 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

收获de季节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值