在 DB 的这些版本范围内可能会遇到此问题。
错误可能是由于编译流水线函数返回 PL/SQL 表my_cur%ROWTYPE
时遇到以下情况:
my_cur
中引用的游标[或表]my_cur%ROWTYPE
属于与函数不同的架构
- 另一个模式中的另一个函数与失败的函数同名
- this
other function
指的是与失败函数相同的游标[或表],
- 这
other function
与游标[或表]在相同的模式中或在不同的模式中。
如需解决方法,请连接到 sys [或 system],并通过以下方式检查具有无效状态的对象
SQL> SELECT owner,object_name,status
FROM dba_objects
WHERE status = 'INVALID'
AND object_type = 'TYPE'
AND object_name LIKE 'SYS_PLSQL_%'
OWNER OBJECT_NAME STATUS
----- -------------------- --------
USER1 SYS_PLSQL_12345_2_1 INVALID
然后编译返回的类型
SQL> alter type USER1.SYS_PLSQL_12345_2_1 compile;
SQL> show error
可能会为另一种类型返回 PLS-00201,例如
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/44 PLS-00201: identifier 'USER2.SYS_PLSQL_12346_7_1' must be declared
然后将执行权限授予无效类型的所有者
SQL> grant execute on USER2.SYS_PLSQL_12346_7_1 to USER1;
然后重新编译无效类型
SQL> alter type USER1.SYS_PLSQL_12345_2_1 compile;
SQL> show error
并通过上述查询重新检查状态无效的对象,如果没有返回行,则可以安全地编译相关包
SQL> alter package USER1.mypackage compile;
参考。来自 Oracle 支持的文档 ID 1185303.1