关于存储过程的编译问题

FreeMyself 2013-10-11 03:57:50
想写一个程序C#程序,通过该程序在Oracle数据库中创建一个存储过程,然后再在C#程序中调用该存储过程,然而调用的时候却出现异常,经检查发现是存储过程没有编译的原因。
现在我想知道,有没有什么办法在程序中编译存储过程?
...全文
303 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
FreeMyself 2013-10-16
  • 打赏
  • 举报
回复
问题解决了,是因为换行符的问题,谢谢各位
  • 打赏
  • 举报
回复
如果你的过程真没有问题的话, 你就再alter procedure [procedure_name] compile; 重编译后再调用
AIDBOPS 2013-10-12
  • 打赏
  • 举报
回复
可以在c#中调用ORACLE自带的脚本utlrp.sql,编译无效的对象。 也可以自己写脚本。 另附上tianlesoftware的博客:http://blog.csdn.net/tianlesoftware/article/details/7412555
FreeMyself 2013-10-12
  • 打赏
  • 举报
回复
引用 5 楼 shiyiwan 的回复:
[quote=引用 3 楼 FreeMyself 的回复:]
调用成功,数据库中也已经生成了存储过程,只不过存储过程没有编译,处于Invilid状态,所以调用时会失败。
如果手动将生成的存储过程编译,则调用成功。
现在想将编译这步也用程序自动完成。

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


存储过程没有编译的话,数据库中怎么会生成它?而且还是invalid状态?[/quote]

我对存储过程的编译过程不太明白,下面是我创建的语句:

Connection=new OracleConnection(this.ConnectString());
Connection.Open();
OracleCommand cmd = Connection.CreateCommand();
cmd.CommandType=CommandType.Text;
cmd.CommandText=al.VRCONTENT;
try {
cmd.ExecuteNonQuery();
} catch(Exception e) {
throw e;
} finally {
Connection.Close();
}
FreeMyself 2013-10-12
  • 打赏
  • 举报
回复
创建后的结果如下

shiyiwan 2013-10-11
  • 打赏
  • 举报
回复
引用 3 楼 FreeMyself 的回复:
调用成功,数据库中也已经生成了存储过程,只不过存储过程没有编译,处于Invilid状态,所以调用时会失败。 如果手动将生成的存储过程编译,则调用成功。 现在想将编译这步也用程序自动完成。 另外,有谁能解释下Oracle的存储过程为什么要编译?作用是什么?
存储过程没有编译的话,数据库中怎么会生成它?而且还是invalid状态?
我刚睡醒 2013-10-11
  • 打赏
  • 举报
回复
你在创建完存储过程后手动提交下试试,还有是不是你的存储过程中有insert的语句啊
FreeMyself 2013-10-11
  • 打赏
  • 举报
回复
调用成功,数据库中也已经生成了存储过程,只不过存储过程没有编译,处于Invilid状态,所以调用时会失败。 如果手动将生成的存储过程编译,则调用成功。 现在想将编译这步也用程序自动完成。 另外,有谁能解释下Oracle的存储过程为什么要编译?作用是什么?
yinan9 2013-10-11
  • 打赏
  • 举报
回复
生成存储过程的代码后有执行吗?
我刚睡醒 2013-10-11
  • 打赏
  • 举报
回复
我感觉是这个存储过程使用代码生成的,而生成完后没有commit。因为你的事务一直连接数据库,有点类似于在oracle中使用OLD:不能修改本表的数据一样

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧