Oracle
 sql >> Database >  >> RDS >> Oracle

Come verificare se esiste una colonna prima di aggiungerla a una tabella esistente in PL/SQL?

Tutti i metadati relativi alle colonne in Oracle Database sono accessibili utilizzando una delle seguenti viste.

user_tab_cols; -- Per tutte le tabelle di proprietà dell'utente

all_tab_cols; -- Per tutte le tabelle accessibili all'utente

dba_tab_cols; -- Per tutte le tabelle nel database.

Quindi, se stai cercando una colonna come ADD_TMS nella tabella SCOTT.EMP e aggiungi la colonna solo se non esiste, il codice PL/SQL sarebbe in questa direzione.

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;
/

Se stai pianificando di eseguirlo come script (non parte di una procedura), il modo più semplice sarebbe includere il comando alter nello script e vedere gli errori alla fine dello script, supponendo che tu non abbia Begin-End per lo script..

Se hai file1.sql

alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;

E col2 è presente, quando lo script viene eseguito, le altre due colonne verrebbero aggiunte alla tabella e il registro mostrerebbe l'errore che dice che "col2" esiste già, quindi dovresti essere a posto.