暂无图片
分享
LEE
2019-05-10
编译无效对象后依旧存在

问题发生在 11.2.0.4.0 RAC环境 

编译失效对象,后仍然还是失效状态

比较奇怪的是应用程序相同,单实例环境未出现,rac环境无法编译通过

 alter procedure DUG_D处方成本更新 compile;

1.png

存储结构中只操作对应的表,未有其他引用对象


存储过程如下,

create or replace procedure DUG_D处方成本更新

(

 Pb输出状态 Out Number,

 Ps输出描述 Out Varchar2

)

IS

begin

 

  for mz in

  (

  SELECT DISTINCT 单据序号I,B.付数 FROM DUG_D中药房住院处方明细 A INNER JOIN DUG_D中药房住院处方单 B

  ON A.单据序号I=B.系统序号

   where A.成本金额 is NULL

  )

  LOOP

    UPDATE DUG_D中药房住院处方明细 A  SET 成本金额=

    (

           SELECT ROUND(B.数量*B.成本单价*mz.付数,2) FROM DUG_D中药房住院处方明细 B WHERE A.系统序号=B.系统序号

           AND B.单据序号I=mz.单据序号I

    )

    WHERE A.单据序号I=mz.单据序号i;

          

    UPDATE DUG_D中药房住院处方单 SET 成本合计=

    ( SELECT ROUND(SUM(成本金额),2) FROM DUG_D中药房住院处方明细 where 单据序号I=mz.单据序号i

    )

    WHERE 系统序号=mz.单据序号i;

    END LOOP;        

    

    

Exception

  When Others Then

    am_error(sqlcode, sqlerrm);

    ps输出描述 := Sqlcode || ':' || Sqlerrm||Pb输出状态;

  end DUG_D处方成本更新;


10046trc如下


收藏
分享
9条回答
默认
最新
LEE
上传附件:orcl1_ora_8966_10046.trc
暂无图片 评论
暂无图片 有用 0
Moone

编译有报错吗?

建议使用sqlplus 执行 compile语句,然后执行show errors查看是否有报错。

暂无图片 评论
暂无图片 有用 0
LEE

编译通过,但存储依旧失效状态

2.png


暂无图片 评论
暂无图片 有用 0
Moone

alter procedure <OWNER>.<NAME> compile试试,是不是有同名对象

暂无图片 评论
暂无图片 有用 0
LEE

按照alter procedure <OWNER>.<NAME> compile试试,是不是有同名对象 执行后,依旧无法编译通过

1.png


暂无图片 评论
暂无图片 有用 0
章芋文

名称上有中文,编译的时候加双引号试试

暂无图片 评论
暂无图片 有用 0
LEE

加上双引好可以了,感谢恩墨专家团队指导,不明白的是 单实例环境 常规方式可以编译通过 ,rac环境这种情况就需要加引号 是什么原因呢

2.png


暂无图片 评论
暂无图片 有用 0
Kamus

你观察到的现像可能不准确吧,理论上不应该单实例成功,RAC不成功

暂无图片 评论
暂无图片 有用 0
LEE
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏