这个问题是oracle的两种情况。
一种是自己的程序里边出现了动态执行语句。在动态执行的过程中,将对象失效了。而下面的程序还是静态编译生成的。对它的引用还是老的物理地址。导致报错。原来的对象失效。
另一种是oracle本身的错误。
针对第一种情况。
1. goto的方法
goto 不能回走。
假如程序在后面,就往下走。但要是回走就会报错。
所以goto一般用来报错。或者是实现游标的continue。
2. 采用动态语句.
由于对象被动态使用到了,所以会动态重编译重新取地址。
当后面的程序需要调用该对象的时候,会因为根据老地址找不到对象,报错对象失效的错误。
程序是静态编译的,对该对象取的地址是老地址,但程序在执行的过程中,该对象被动态编译了,就会使调用失效。
针对这种情况,有两种方法:
a 动态重编译程序。对该对象重新取地址。
b 使用动态语句来调用过程。由于是动态调用,所以会在运行时才编译。