Wszystkie metadane dotyczące kolumn w Oracle Database są dostępne za pomocą jednego z następujących widoków.
user_tab_cols; -- Dla wszystkich tabel należących do użytkownika
all_tab_cols; -- Dla wszystkich tabel dostępnych dla użytkownika
dba_tab_cols; -- Dla wszystkich tabel w bazie danych.
Tak więc, jeśli szukasz kolumny takiej jak ADD_TMS w tabeli SCOTT.EMP i dodajesz kolumnę tylko wtedy, gdy nie istnieje, kod PL/SQL będzie zgodny z tymi liniami.
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;
/
Jeśli planujesz uruchomić to jako skrypt (nie jest częścią procedury), najprostszym sposobem byłoby dołączenie polecenia alter do skryptu i zobaczenie błędów na końcu skryptu, zakładając, że nie masz opcji Początek-Koniec dla skrypt...
Jeśli masz plik1.sql
alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;
A col2 jest obecny, kiedy skrypt zostanie uruchomiony, pozostałe dwie kolumny zostaną dodane do tabeli, a dziennik pokaże błąd mówiący, że „col2” już istnieje, więc powinno być w porządku.