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

解决方案 »

  1.   

    我感觉是这个存储过程使用代码生成的,而生成完后没有commit。因为你的事务一直连接数据库,有点类似于在oracle中使用OLD:不能修改本表的数据一样
      

  2.   

    调用成功,数据库中也已经生成了存储过程,只不过存储过程没有编译,处于Invilid状态,所以调用时会失败。
    如果手动将生成的存储过程编译,则调用成功。
    现在想将编译这步也用程序自动完成。另外,有谁能解释下Oracle的存储过程为什么要编译?作用是什么?
      

  3.   

    你在创建完存储过程后手动提交下试试,还有是不是你的存储过程中有insert的语句啊
      

  4.   


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

  5.   


    存储过程没有编译的话,数据库中怎么会生成它?而且还是invalid状态?我对存储过程的编译过程不太明白,下面是我创建的语句: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();
    }
      

  6.   

    可以在c#中调用ORACLE自带的脚本utlrp.sql,编译无效的对象。
    也可以自己写脚本。
    另附上tianlesoftware的博客:http://blog.csdn.net/tianlesoftware/article/details/7412555
      

  7.   

    如果你的过程真没有问题的话,
    你就再alter procedure [procedure_name] compile;
    重编译后再调用