All metadata om kolumnerna i Oracle Database är tillgänglig med en av följande vyer.
user_tab_cols; -- För alla tabeller som ägs av användaren
all_tab_cols; -- För alla tabeller som är tillgängliga för användaren
dba_tab_cols; -- För alla tabeller i databasen.
Så, om du letar efter en kolumn som ADD_TMS i SCOTT.EMP-tabellen och lägger till kolumnen endast om den inte finns, skulle PL/SQL-koden ligga på samma sätt.
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;
/
Om du planerar att köra detta som ett skript (inte en del av en procedur), skulle det enklaste sättet vara att inkludera alter-kommandot i skriptet och se felen i slutet av skriptet, förutsatt att du inte har någon början-slut för manuset..
Om du har file1.sql
alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;
Och col2 är närvarande, när skriptet körs, skulle de andra två kolumnerna läggas till i tabellen och loggen skulle visa felet som säger att "col2" redan finns, så du borde vara okej.