這個是因為過程中涉及的數據庫對象發生變動而造成存儲過程失效。
改用動態sql,或者每次執行過程前先進行編譯即可。

解决方案 »

  1.   

    请您具体说一下行吗?我对ORACLE不是很了解,代码可以实现每次执行前先进行编译吗?谢谢了
      

  2.   

    就是執行alter procedure pro_name compile
    對存儲過程進行編譯。
    如果都使用動態sql,性能會有一定降低,但是過程不會失效,而無須重新編譯了。
      

  3.   

    因为,在ORACLE的存储过程是需要先编译才能执行的,
    一般编译一次以后,就可以一直执行下去了
    但如果你修改了相关对象的信息以后,存储过程就需要重新编译了,否则是不可用的
    如:你修改了某个表的一个字段的长度,而这个表有一个存储过程与它相关,这时候这个存储过程就不可用了,如果想要用,就需要重新编译了。