プロジェクトをOracle Databaseでコンパイルしようとすると、問題が発生します。簡単にするために、2 つのパッケージ (UTILS と TYPES) と 1 つのビュー (VIEW) の 3 つのオブジェクトがあります。
パッケージ UTILS は、パッケージ TYPES で定義されたタイプを使用しています。パッケージ TYPES は、そのタイプの 1 つのベースとして VIEW を使用しています。そして、VIEWはそのスクリプトでパッケージUTILSの関数を使用しています。これらのオブジェクトの 1 つに変更を加えようとすると、すべてが無効な状態にあるため、コンパイルできません。そのため、ある種のオブジェクト依存ループが作成されます。
この問題を解決するのを手伝ってください。
たとえば、以下のコードをコンパイルする方法はありますか? 各オブジェクトは個々に構文的に正しいですが、どうすればすべてを一緒にコンパイルできるのでしょうか?
create or replace package my_types is
type type1 is table of number;
type type2 is table of my_view%rowtype;
end;
/
create or replace package my_utils is
function get_1 return number;
procedure do_something(parameter my_types.type2);
end;
/
create or replace package body my_utils is
function get_1 return number is
begin
return 1;
end;
procedure do_something(parameter my_types.type2) is
begin
null;
end;
end;
/
create or replace force view my_view as
select * from dual
where 1 = my_utils.get_1();
exec dbms_utility.compile_schema(user, false);
select object_name from user_objects where status <> 'VALID';