我遇到了一个问题,我正试图将程序包的执行授予另一个架构。
GRANT EXECUTE ON PP.PKG_PROF TO PPSERVICE;
看起来Oracle尝试在授予之前重新编译/重新验证包。但是它失败了,出现以下错误:
GRANT EXECUTE ON PP.PKG_PROF TO PPSERVICE
Error report -
SQL Error: ORA-04045: errors during recompilation/revalidation of PP.PKG_PROF
ORA-20000: ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 83
04045. 00000 - "errors during recompilation/revalidation of %s.%s"
*Cause: This message indicates the object to which the following
errors apply. The errors occurred during implicit
recompilation/revalidation of the object.
*Action: Check the following errors for more information, and
make the necessary corrections to the object.
但是,如果我查看第83行的代码,它会执行以下查询:
select 'x' into vtemp
from cust_field_vals
where cust_fields = vin_cust_fields
and userid = vin_user_id;
vin_cust_fields和vin_user_id是在调用包中的过程时提供的基于参数的值。
我的问题是:oracle正在做什么?我理解“选择INTO” 理论上可以返回超过请求的行数(在这种情况下需要为1),但由于它不知道我的vin参数是什么,它如何进行评估?为什么重新编译/重新验证会抛出基本上等于数据异常的异常,它甚至不应该查看我正在尝试做的事情(即:我不是试图实际执行该过程)。 / p>
这不是我第一次看到这个,如果我没记错的话,我甚至认为这也是在重新编译触发器时发生的(不是在插入数据时)。
有什么想法?谢谢!
答案 0 :(得分:1)