日期:2014-05-17  浏览次数:21024 次

关于存储过程的编译问题
想写一个程序C#程序,通过该程序在Oracle数据库中创建一个存储过程,然后再在C#程序中调用该存储过程,然而调用的时候却出现异常,经检查发现是存储过程没有编译的原因。
现在我想知道,有没有什么办法在程序中编译存储过程?

------解决方案--------------------
我感觉是这个存储过程使用代码生成的,而生成完后没有commit。因为你的事务一直连接数据库,有点类似于在oracle中使用OLD:不能修改本表的数据一样
------解决方案--------------------
你在创建完存储过程后手动提交下试试,还有是不是你的存储过程中有insert的语句啊
------解决方案--------------------
引用:
调用成功,数据库中也已经生成了存储过程,只不过存储过程没有编译,处于Invilid状态,所以调用时会失败。
如果手动将生成的存储过程编译,则调用成功。
现在想将编译这步也用程序自动完成。

另外,有谁能解释下Oracle的存储过程为什么要编译?作用是什么?


存储过程没有编译的话,数据库中怎么会生成它?而且还是invalid状态?
------解决方案--------------------
可以在c#中调用ORACLE自带的脚本utlrp.sql,编译无效的对象。
也可以自己写脚本。
另附上tianlesoftware的博客:http://blog.csdn.net/tianlesoftware/article/details/7412555
------解决方案--------------------
如果你的过程真没有问题的话,
你就再alter procedure [procedure_name] compile;
重编译后再调用