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

Hvordan kontrollerer man, om en kolonne eksisterer, før man tilføjer den til en eksisterende tabel i PL/SQL?

Alle metadata om kolonnerne i Oracle Database er tilgængelige ved hjælp af en af ​​følgende visninger.

user_tab_cols; -- For alle tabeller, der ejes af brugeren

alle_faneblade; -- For alle tabeller, der er tilgængelige for brugeren

dba_tab_cols; -- For alle tabeller i databasen.

Så hvis du leder efter en kolonne som ADD_TMS i SCOTT.EMP Table og kun tilføje kolonnen, hvis den ikke eksisterer, ville PL/SQL-koden være på denne måde.

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

Hvis du planlægger at køre dette som et script (ikke en del af en procedure), ville den nemmeste måde være at inkludere alter-kommandoen i scriptet og se fejlene i slutningen af ​​scriptet, forudsat at du ikke har nogen Start-End for manuskriptet..

Hvis du har file1.sql

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

Og col2 er til stede, når scriptet køres, vil de to andre kolonner blive tilføjet til tabellen, og loggen vil vise fejlen, der siger "col2" eksisterer allerede, så du burde være okay.



  1. MariaDB 10.6 og NextCloud:COMPRESSED Row er skrivebeskyttet som standard

  2. Tilslutning til en tabel baseret på kommaseparerede værdier

  3. Masseindsæt felter med fast bredde

  4. Analyse af ODBC-data i IBM SPSS