对oracle 触发器的一些见解
2012-12-21 17:13
120 查看
前些日子在某国企做数据库的时候被告知他们的oracle数据库里面不建议用trigger,说了一大堆理由,概括一下就是不稳定,可靠性低。
我一时间想不明白,既然Oracle这么顶级的数据库,如此成熟的产品,如果触发器不可靠的话早就该舍弃掉换做其他方式替代了。
今天我修改数据库表结构的时候终于发现了这个问题。
我有两张表A和B,A有一个触发器,作用是插入A表之前做一些操作然后把数据出发到B。
由于B被同事清空掉了,所以要把表B的数据重新填充进去。
我先将A表的名字改为 COPYA,随后将A删掉,然后重新新建A,重新编译一下TRIGER,再将COPYA的数据复制到新建的A中,结果触发器不执行。
仔细分析,记得以前删表的时候触发器都是要跟随表直接被删掉的,而刚才的操作TRIGER并没有删掉,而且我又把它重新编译了一次,它的名字虽然是TRG_A,但它亲爹只有一个,是否是之前改过名字的COPYA,而不是新建的这个A呢,经过验证,果然不出所料。
这下好办了,删掉TRIGER,重新建立,成功。
今天才明白那些国企里面的人觉得触发器不可靠原因可能就在这里,因为我发现他们经常要修改表结构,而且数据库里面的数据存放挺乱的,老师傅一走派新人来他们看着文档做连一丁点的头绪都没有。当然这是我的个人意见,才疏学浅可能有疏漏之处,如果有明白的人还请不吝赐教。
我一时间想不明白,既然Oracle这么顶级的数据库,如此成熟的产品,如果触发器不可靠的话早就该舍弃掉换做其他方式替代了。
今天我修改数据库表结构的时候终于发现了这个问题。
我有两张表A和B,A有一个触发器,作用是插入A表之前做一些操作然后把数据出发到B。
由于B被同事清空掉了,所以要把表B的数据重新填充进去。
我先将A表的名字改为 COPYA,随后将A删掉,然后重新新建A,重新编译一下TRIGER,再将COPYA的数据复制到新建的A中,结果触发器不执行。
仔细分析,记得以前删表的时候触发器都是要跟随表直接被删掉的,而刚才的操作TRIGER并没有删掉,而且我又把它重新编译了一次,它的名字虽然是TRG_A,但它亲爹只有一个,是否是之前改过名字的COPYA,而不是新建的这个A呢,经过验证,果然不出所料。
这下好办了,删掉TRIGER,重新建立,成功。
今天才明白那些国企里面的人觉得触发器不可靠原因可能就在这里,因为我发现他们经常要修改表结构,而且数据库里面的数据存放挺乱的,老师傅一走派新人来他们看着文档做连一丁点的头绪都没有。当然这是我的个人意见,才疏学浅可能有疏漏之处,如果有明白的人还请不吝赐教。
相关文章推荐
- 关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例
- 黑马程序员-Oracle 触发器的一些知识
- SqlServer和Oracle中一些常用的sql语句8 触发器和事务
- SqlServer和Oracle中一些常用的sql语句8 触发器和事务
- 让oracle中的触发器暂时性失效,以及恢复,方面一些初始化操作
- 对ORACLE的一些闪回和触发器操作,和备份
- 关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例
- 关于Java里的volatile的一些见解
- oracle 10G 关于回收站的一些操作
- Oracle中的触发器
- Oracle中sequenc和触发器
- ORACLE执行计划的一些基本概念(1)
- Oracle中的触发器
- 关于公共类Util的一些见解
- Oracle Form 触发器执行顺序(转)
- 【oracle】Oracle12c安装及一些使用问题
- oracle开发之触发器
- oracle聚合函数rank()的用法和一些体会
- 【oracle资料整理】--【16】触发器
- ORACLE LATERAL-SQL-INJECTION 个人见解