oracle - ORA-00600: 编译返回流水线的函数时出现内部错误代码
问题描述
我有一个包含如下代码的包规范
CURSOR my_cur IS
select ...;
TYPE mytype IS TABLE OF my_cur%ROWTYPE;
FUNCTION myfun
RETURN mytype PIPELINED;
当我尝试编译包规范时,出现以下错误:
ORA-00600 : 内部错误代码, 参数: [psdmsc.c: spawned type invalid], [0x1ED93D3C10], [3], [], [], [], [], [], [], [], [ ],[]
有趣的是,包含这个函数的包的主体编译得很好。
我认为结果集可能会导致问题,但我游标中的查询最多返回 1 行
解决方案
在 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
推荐阅读
- flask - 为什么没有显示响应结构?
- reactjs - 使用带有 setInterval 中的钩子的 ref 对本机 scrollTo 做出反应
- c++ - 在 c++ 中 int 数据类型和自定义类数据类型之间添加以获得更高的性能
- android - 为什么在 android 版本 10 中没有触发 onMessagedRecieved?
- javascript - 使用 JS 和 PHP 从表单上传文件时发布错误
- spring - kafka cloud stream:创建生产者绑定失败;30 秒后重试
- python - 输入 Sqlite3 查询中的标签给出错误
- java - 脉冲星消息监听器的多线程
- database - 来自 sqlite3 db 的日期和时间
- javascript - 如何在使用 Quasar 框架和 Vue.js 将鼠标悬停在图像上时显示一些信息