スマートフォン・ジン | Smartphone-Zine

引っ越し先→ https://smartphone-zine.com/

関数内で使用しているオブジェクトがDROPされた場合のパッケージの挙動

関数内で使用しているオブジェクトが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>