sql >> Databasteknik >  >> RDS >> Oracle

Hur kontrollerar man om en kolumn finns innan man lägger till den i en befintlig tabell i PL/SQL?

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.



  1. T-SQL:Avrunda till närmaste 15 minuters intervall

  2. PostgreSQL lastbalansering med HAProxy &Keepalved

  3. Hur INTE RLIKE fungerar i MariaDB

  4. Databasprestandajustering för MariaDB