ORA-00600: 编译函数返回 Pipelined 时的内部错误代码
ORA-00600: internal error code when compiling function returning Pipelined
我有一个包规范,代码如下
CURSOR my_cur IS
select ...;
TYPE mytype IS TABLE OF my_cur%ROWTYPE;
FUNCTION myfun
RETURN mytype PIPELINED;
当我尝试编译包规范时,出现以下错误:
ORA-00600: internal error code, arguments: [psdmsc.c: spawned type
invalid], [0x1ED93D3C10], [3], [], [], [], [], [], [], [], [], []
有趣的是,包含此函数的包主体编译得很好。
我认为结果集可能会导致问题,但我的游标中的查询 returns 最多 1 行
此问题可能会在数据库的这些版本范围内遇到。
编译流水线函数return编译my_cur%ROWTYPE
的PL/SQLtable时出现以下情况可能会出现错误:
my_cur%ROWTYPE
中引用的 - 或 table]
my_cur
属于
与函数不同的模式
- 另一个模式中有另一个函数与
失败的功能
- 此
other function
指的是与失败函数相同的游标[或 table],
- 此
other function
与游标[或 table] 处于同一架构中,或者处于不同的架构中。
解决方法是连接到 sys [或系统],并通过
检查状态无效的对象
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
然后编译类型returned
SQL> alter type USER1.SYS_PLSQL_12345_2_1 compile;
SQL> show error
可能 return 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
并通过上述查询重新检查状态为无效的对象,如果return没有行,
然后可以安全地编译相关包
SQL> alter package USER1.mypackage compile;
参考。来自 Oracle 支持的文档 ID 1185303.1
发现问题 - 在我的游标查询中,其中一个别名是保留关键字。使用转义字符并不能阻止它被视为保留关键字。有趣的是,查询本身运行良好,但阻止了函数编译
我有一个包规范,代码如下
CURSOR my_cur IS
select ...;
TYPE mytype IS TABLE OF my_cur%ROWTYPE;
FUNCTION myfun
RETURN mytype PIPELINED;
当我尝试编译包规范时,出现以下错误:
ORA-00600: internal error code, arguments: [psdmsc.c: spawned type invalid], [0x1ED93D3C10], [3], [], [], [], [], [], [], [], [], []
有趣的是,包含此函数的包主体编译得很好。
我认为结果集可能会导致问题,但我的游标中的查询 returns 最多 1 行
此问题可能会在数据库的这些版本范围内遇到。
编译流水线函数return编译my_cur%ROWTYPE
的PL/SQLtable时出现以下情况可能会出现错误:
my_cur%ROWTYPE
中引用的- 或 table]
my_cur
属于 与函数不同的模式 - 另一个模式中有另一个函数与 失败的功能
- 此
other function
指的是与失败函数相同的游标[或 table], - 此
other function
与游标[或 table] 处于同一架构中,或者处于不同的架构中。
解决方法是连接到 sys [或系统],并通过
检查状态无效的对象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
然后编译类型returned
SQL> alter type USER1.SYS_PLSQL_12345_2_1 compile;
SQL> show error
可能 return 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
并通过上述查询重新检查状态为无效的对象,如果return没有行, 然后可以安全地编译相关包
SQL> alter package USER1.mypackage compile;
参考。来自 Oracle 支持的文档 ID 1185303.1
发现问题 - 在我的游标查询中,其中一个别名是保留关键字。使用转义字符并不能阻止它被视为保留关键字。有趣的是,查询本身运行良好,但阻止了函数编译