変更内容によって異なります。あなたは何かが何らかの理由で無効にされているかどうかを確認するために影響を受ける可能性があるかを確認するthe all_dependencies
view (or the user_
or dba_
equivalents)を見て、そしてthe user_objects
viewことができます。
create table t42 (col1 varchar2(10));
insert into t42 (col1) values ('val1');
create procedure p42 as
l_col1 t42.col1%type;
begin
select col1 into l_col1 from t42;
dbms_output.put_line(l_col1);
end p42;
/
column object_name format a12
select object_type, object_name, status
from user_objects
where object_name in ('T42', 'P42');
OBJECT_TYPE OBJECT_NAME STATUS
------------------- ------------ -------
PROCEDURE P42 VALID
TABLE T42 VALID
select type, name, dependency_type
from user_dependencies
where referenced_type = 'TABLE' and referenced_name = 'T42';
TYPE NAME DEPE
------------------ ------------------------------ ----
PROCEDURE P42 HARD
は、列、この場合の手順が無効になるわけではないの追加:
alter table t42 add (col2 varchar2(10));
select object_type, object_name, status
from user_objects
where object_name in ('T42', 'P42');
OBJECT_TYPE OBJECT_NAME STATUS
------------------- ------------ -------
PROCEDURE P42 VALID
TABLE T42 VALID
手順で使用される列を変更するけれども行います
alter table t42 modify (col1 varchar2(20));
select object_type, object_name, status
from user_objects
where object_name in ('T42', 'P42');
OBJECT_TYPE OBJECT_NAME STATUS
------------------- ------------ -------
PROCEDURE P42 INVALID
TABLE T42 VALID
しかし、あなたは明示的に手順を再コンパイルする必要はありません。あなたは、あなたがしたいことができれば、それが参照されるときに、Oracleは自動的に無効なオブジェクトを再コンパイルしようとします:あなたは、あまりにも依存関係の詳細情報や詳細情報を取得するためにPL/Scopeを使用することができます
exec p42;
PL/SQL procedure successfully completed.
select object_type, object_name, status
from user_objects
where object_name in ('T42', 'P42');
OBJECT_TYPE OBJECT_NAME STATUS
------------------- ------------ -------
PROCEDURE P42 VALID
TABLE T42 VALID
。
Sybase製品(ASE、SQLAnywhere、IQ、Advantage)はどちらですか?なぜあなたの質問に 'oracle'でタグを付けましたか? – markp