this one is really nasty (Bug 18097476, 12.1.0.1 on Linux x86-64 )
test-case (although slightly different from the description of the bug):
connect / as sysdba drop user pp cascade; drop user ppp cascade; drop user pppp cascade; create user pp identified by "Welcome1$" default tablespace users temporary tablespace temp quota unlimited on users; grant create session, create type, create procedure to pp; connect pp/"Welcome1$" create or replace package p1 as type t1 is record ( a number, b varchar2(10)); type tt1 is table of t1; function pipelined return tt1 pipelined; end p1; / create or replace package body p1 as function pipelined return tt1 pipelined as l t1; lt tt1 := tt1(); begin for i in 1..10 loop lt.extend; l.a := i; l.b := 'aaaa'; lt(lt.last) := l; pipe row(lt(lt.last)); end loop; return; end pipelined; end p1; / select * from table (p1.pipelined); connect / as sysdba select owner,object_name,object_type,object_id from dba_objects where object_name = 'P1'; select owner,object_name,object_type,object_id from dba_objects where object_name like 'SYS_PLSQL%' and owner like 'PP%'; create user ppp identified by "Welcome1$" default tablespace users temporary tablespace temp quota unlimited on users; grant create session, create type, create procedure to ppp; create user pppp identified by "Welcome1$" default tablespace users temporary tablespace temp quota unlimited on users; grant create session, create type, create procedure to pppp; create or replace directory dir_tmp as '/home/oracle/'; host rm -f /home/oracle/dmp.dmp host expdp userid="'/ as sysdba'" schemas=pp directory=dir_tmp dumpfile=dmp.dmp logfile=dmp.log host impdp userid="'/ as sysdba'" remap_schema=pp:ppp directory=dir_tmp dumpfile=dmp.dmp logfile=dmp.log host impdp userid="'/ as sysdba'" remap_schema=pp:pppp directory=dir_tmp dumpfile=dmp.dmp logfile=dmp.log select owner,object_name,object_type,object_id from dba_objects where object_name like 'SYS_PLSQL%' and owner like 'PP%';
the last select shoud return something similar to this:
OWNER OBJECT_NAME OBJECT_TYPE OBJECT_ID --------- ------------------------------ ----------- ---------- PP SYS_PLSQL_62B6CB68_DUMMY_1 TYPE 20223 PP SYS_PLSQL_62B6CB68_9_1 TYPE 20222 PP SYS_PLSQL_62B6CB68_24_1 TYPE 20224 PPP SYS_PLSQL_62B6CB68_DUMMY_1 TYPE 20273 PPP SYS_PLSQL_62B6CB68_9_1 TYPE 20272 PPP SYS_PLSQL_62B6CB68_24_1 TYPE 20274 PPPP SYS_PLSQL_62B6CB68_DUMMY_1 TYPE 20301 PPPP SYS_PLSQL_62B6CB68_9_1 TYPE 20300 PPPP SYS_PLSQL_62B6CB68_24_1 TYPE 20302
if now, for whatever reason, someone drops one of the “not” dummy_1 types:
drop type SYS_PLSQL_62B6CB68_24_1;
… the result is, that you can not drop or compile the package anymore:
alter package p1 compile; alter package p1 compile * ERROR at line 1: ORA-04043: object SYS_PLSQL_62B6CB68_24_1 does not exist
or, try to compile the package for the second schema without droppping a type before (does not happen on the third one :) ):
SYS@dbs101> alter package ppp.p1 compile; alter package ppp.p1 compile * ERROR at line 1: ORA-04043: object SYS_PLSQL_62B6CB68_24_1 does not exist
suprisingly this does not happen with 2 schemas in my case. it starts when a third schema is present.
fyi: oracle creates this SY_PLSQL* as soon as you create a package which contains pipeplined functions which return types defined in the package (bad sentence, I know :) ).
UPDATE 2014-JUL-18:Patch 18097476 is currently available on top of 12.1.0.1 for Linux x86-64.
UPDATE 2015-FEB-05:Same issue reproduces on 12.1.0.2 (with PSU2 applied) on Linux x86-64. No patch available currently
UPDATE 2015-FEB-09:Patch 19504744 is vailable for 12.1.0.2