sql >> Database >  >> RDS >> Oracle

Hoe controleer ik of een kolom bestaat voordat deze wordt toegevoegd aan een bestaande tabel in PL/SQL?

Alle metadata over de kolommen in Oracle Database is toegankelijk via een van de volgende weergaven.

gebruiker_tab_cols; -- Voor alle tafels die eigendom zijn van de gebruiker

all_tab_cols; -- Voor alle tabellen die toegankelijk zijn voor de gebruiker

dba_tab_cols; -- Voor alle tabellen in de database.

Dus, als u op zoek bent naar een kolom zoals ADD_TMS in de SCOTT.EMP-tabel en de kolom alleen toevoegt als deze niet bestaat, zou de PL/SQL-code in deze richting staan..

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

Als u van plan bent dit als een script uit te voeren (geen onderdeel van een procedure), is de eenvoudigste manier om het commando alter in het script op te nemen en de fouten aan het einde van het script te zien, ervan uitgaande dat u geen Begin-End hebt voor het script..

Als u file1.sql

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

En col2 is aanwezig, wanneer het script wordt uitgevoerd, zouden de andere twee kolommen aan de tabel worden toegevoegd en het logboek zou de fout tonen dat "col2" al bestaat, dus het zou goed moeten zijn.



  1. MySQL datetime-velden en zomertijd -- hoe verwijs ik naar het extra uur?

  2. psql-client kan nu een schaakbord zijn ...

  3. MySQL-syntaxis voor Join Update

  4. Meerdere PostgreSQL-instanties op één host uitvoeren