系统产生的SYS_PLSQL对象

环境
OS: SunOS HOSTNAME 5.10 Generic_127111-11 sun4u sparc SUNW,Sun-Fire-V890
DB:Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production

问题:一个包处于无效状态,通常直接用命令编译一下,就行了,但这个简单的操作,却碰到:
SQL> alter package SCHEMA.PACKAGENAME compile;
alter package SCHEMA.PACKAGENAME compile
*
ERROR at line 1:
ORA-04043: object SYS_PLSQL_6459_DUMMY_2 does not exist

[@more@]

这个错误,其实在9i里这是比较常见的错误,在SP里定义:TYPE和TABLE OF TYPE的数据对象时.Oracle就会自动的在系统内生成SYS_PLSQL_%对象,好象Pipeline也会产生.当找到不这些SYS_PLSQL对象时,这个SP就无法通过编译了.

SQL> select 'drop type SCHEMA.'||object_name||' force;' from dba_objects where object_name like 'SYS_PLSQL_6459%';
drop type SCHEMA.SYS_PLSQL_6459_15_1 force;
drop type SCHEMA.SYS_PLSQL_6459_DUMMY_1 force;

这里确实没有错误提示里所指的对象。

解决办法,把这个SP对应的SYS_PLSQL对象全删除:
SQL> drop type SCHEMA.SYS_PLSQL_6459_15_1 force;

Type dropped.

SQL> drop type SCHEMA.SYS_PLSQL_6459_DUMMY_1 force;

Type dropped.

SQL> alter package SCHEMA.PACKAGENAME compile;

Package altered.

确认一下,有没有重新生成SYS_PLSQL:

SQL> select 'drop type SCHEMA.'||object_name||' force;' from dba_objects where object_name like 'SYS_PLSQL_6459%';
drop type SCHEMA.SYS_PLSQL_6459_DUMMY_2 force;
drop type SCHEMA.SYS_PLSQL_6459_15_2 force;
drop type SCHEMA.SYS_PLSQL_6459_DUMMY_2 force;

这就对应Package header里定义了三个TYPE:
TYPE invcur_t IS REF CURSOR RETURN trinvoicemaster%ROWTYPE;
TYPE inv_lines IS TABLE OF trinvoicemaster%ROWTYPE;
FUNCTION split_invoice ( cur_invoicemast in invcur_t ) RETURN inv_lines pipelined;

要删除这些SYS_PLSQL有时比较难的,记得有次用命令死活也删除不了,最后借助TOAD,在图形里把它删除了。Package所引用的SYS_PLSQL对象怎么会不见了,我记得这是一个BUG. 10G之后,就没有碰到这个问题了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/45188/viewspace-1030932/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/45188/viewspace-1030932/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值