Oracle Databaseの列に関するすべてのメタデータには、次のいずれかのビューを使用してアクセスできます。
user_tab_cols; -ユーザーが所有するすべてのテーブルの場合
all_tab_cols; -ユーザーがアクセスできるすべてのテーブルの場合
dba_tab_cols; -データベース内のすべてのテーブル。
したがって、SCOTT.EMP表でADD_TMSのような列を探していて、その列が存在しない場合にのみ列を追加する場合、PL/SQLコードはこれらの行に沿ったものになります。
DECLARE
v_column_exists number := 0;
BEGIN
Select count(*) into v_column_exists
from user_tab_cols
where upper(column_name) = 'ADD_TMS'
and upper(table_name) = 'EMP';
--and owner = 'SCOTT --*might be required if you are using all/dba views
if (v_column_exists = 0) then
execute immediate 'alter table emp add (ADD_TMS date)';
end if;
end;
/
これを(プロシージャの一部ではなく)スクリプトとして実行することを計画している場合、最も簡単な方法は、スクリプトにalterコマンドを含めて、スクリプトの最後にエラーを表示することです。スクリプト..
file1.sqlがある場合
alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;
また、col2が存在し、スクリプトを実行すると、他の2つの列がテーブルに追加され、ログに「col2」がすでに存在するというエラーが表示されるため、問題ないはずです。