ORA-12012 & PLS-00905

早上在检查生产环境alert<sid>.log时发现如下错误:


Wed Jun  1 07:06:07 2011
Errors in file /home/oracle/admin/ywprod/bdump/ywprod_j000_462886.trc:
ORA-12012: error on auto execute of job 217
ORA-06550: line 1, column 96:
PLS-00905: object YWPROD.P_GETCLAIMDATA is invalid
ORA-06550: line 1, column 96:
PL/SQL: Statement ignored

 

 

根据PLS-00905: object YWPROD.P_GETCLAIMDATA is invalid 得知是由于YWPROD.P_GETCLAIMDATA存储过程无效,

导致job执行失败。

YWPROD.P_GETCLAIMDATA为啥会失效呢?这个存储过程运行很长时间了,如果没人改过不应该出现这种问题啊。

 

到生产环境中重新编译一下这个存储过程,出现编译错误

错误:PL/SQL: ORA-00913: 值过多
行:96
文本:INSERT /*+  append */ INTO test1 (SELECT * FROM test2);

错误:PL/SQL: SQL Statement ignored
行:96
文本:INSERT /*+  append */ INTO test1 (SELECT * FROM test2);


对比一下test2,test1的表结构,发现test2比test1多两列。原来由于业务上的需要开发人员在test2表上新增了两列.

在新增后并没有对test1表做相应的调整。也没有修改存储过程。所以导致了今天的这个错误。

虽然在项目组中强调过在进行数据结构变更后一定要检查是否有无效的对象存在,但时间一长就把这件事给忘记了。

 

总结:1.生产库上的任何操作都要按照流程,按规矩办,不能存在侥幸心理。


         2.在这个存储过程中test1表,其实用不到test2表新增的那两列的数据。如果在能用select col1,col2 去代替

            select *  也可以避免上述错误。
               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值