Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie überprüft man, ob eine Spalte existiert, bevor man sie zu einer bestehenden Tabelle in PL/SQL hinzufügt?

Auf alle Metadaten zu den Spalten in Oracle Database kann über eine der folgenden Ansichten zugegriffen werden.

user_tab_cols; -- Für alle Tabellen, die dem Benutzer gehören

all_tab_cols; -- Für alle dem Benutzer zugänglichen Tabellen

dba_tab_cols; -- Für alle Tabellen in der Datenbank.

Wenn Sie also nach einer Spalte wie ADD_TMS in der SCOTT.EMP-Tabelle suchen und die Spalte nur hinzufügen, wenn sie nicht existiert, würde der PL/SQL-Code in diese Richtung gehen..

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

Wenn Sie vorhaben, dies als Skript (nicht Teil einer Prozedur) auszuführen, wäre es am einfachsten, den alter-Befehl in das Skript aufzunehmen und die Fehler am Ende des Skripts anzuzeigen, vorausgesetzt, Sie haben kein Begin-End für das Skript..

Wenn Sie file1.sql

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

Und col2 ist vorhanden, wenn das Skript ausgeführt wird, würden die anderen beiden Spalten zur Tabelle hinzugefügt und das Protokoll würde den Fehler anzeigen, dass "col2" bereits existiert, also sollten Sie in Ordnung sein.