関数内で使用しているオブジェクトがDROPされた場合はエラーとなりますが、再度作成されると問題なく動作します。その際に際コンパイルも不要です。
SQL> conn scott/tiger@ 接続されました。 SQL> DROP TABLE A; 表が削除されました。 SQL> DROP TABLE B; 表が削除されました。 SQL> DROP SYNONYM S; シノニムが削除されました。 SQL> DROP VIEW V; ビューが削除されました。 SQL> SQL> CREATE TABLE A( 2 NAME VARCHAR2(10) 3 ); 表が作成されました。 SQL> CREATE TABLE B( 2 NAME VARCHAR2(10) 3 ); 表が作成されました。 SQL> SQL> INSERT INTO A VALUES('テーブルA'); 1行が作成されました。 SQL> INSERT INTO B VALUES('テーブルB'); 1行が作成されました。 SQL> SQL> CREATE SYNONYM S FOR A; シノニムが作成されました。 SQL> SQL> CREATE VIEW V AS SELECT NAME FROM S; ビューが作成されました。 SQL> SQL> SELECT NAME FROM V; NAME ---------- テーブルA SQL> SQL> DROP SYNONYM S; シノニムが削除されました。 SQL> CREATE SYNONYM S FOR B; シノニムが作成されました。 SQL> SQL> SELECT NAME FROM V; NAME ---------- テーブルB SQL> SQL> CREATE OR REPLACE PACKAGE P IS 2 FUNCTION P RETURN VARCHAR2; END P; 3 / パッケージが作成されました。 SQL> CREATE OR REPLACE PACKAGE BODY P AS 2 FUNCTION P RETURN VARCHAR2 IS 3 strNAME V.NAME%TYPE; 4 BEGIN 5 SELECT NAME INTO strNAME FROM V; 6 RETURN strNAME; 7 END P; 8 END P; 9 / パッケージ本体が作成されました。 SQL> SQL> select P.P from dual; P ----------------------------------------------------- テーブルB SQL> SQL> DROP SYNONYM S; シノニムが削除されました。 SQL> SQL> select P.P from dual; select P.P from dual * 行1でエラーが発生 しました。: ORA-04063: package body "SCOTT.P"にエラーがあります。 SQL> SQL> CREATE SYNONYM S FOR A; シノニムが作成されました。 SQL> SQL> select P.P from dual; P ----------------------------------------------------- テーブルA SQL>