Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak sprawdzić, czy kolumna istnieje przed dodaniem jej do istniejącej tabeli w PL/SQL?

Wszystkie metadane dotyczące kolumn w Oracle Database są dostępne za pomocą jednego z następujących widoków.

user_tab_cols; -- Dla wszystkich tabel należących do użytkownika

all_tab_cols; -- Dla wszystkich tabel dostępnych dla użytkownika

dba_tab_cols; -- Dla wszystkich tabel w bazie danych.

Tak więc, jeśli szukasz kolumny takiej jak ADD_TMS w tabeli SCOTT.EMP i dodajesz kolumnę tylko wtedy, gdy nie istnieje, kod PL/SQL będzie zgodny z tymi liniami.

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

Jeśli planujesz uruchomić to jako skrypt (nie jest częścią procedury), najprostszym sposobem byłoby dołączenie polecenia alter do skryptu i zobaczenie błędów na końcu skryptu, zakładając, że nie masz opcji Początek-Koniec dla skrypt...

Jeśli masz plik1.sql

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

A col2 jest obecny, kiedy skrypt zostanie uruchomiony, pozostałe dwie kolumny zostaną dodane do tabeli, a dziennik pokaże błąd mówiący, że „col2” już istnieje, więc powinno być w porządku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa pobieranie danych z SQL Server do SqlDataReader?

  2. Oracle PL/SQL - Jak stworzyć prostą zmienną tablicową?

  3. Jak zidentyfikować nieprawidłowe (uszkodzone) wartości przechowywane w kolumnach Oracle DATE?

  4. Funkcja TRUNC(data) w Oracle

  5. Jak stworzyć procedurę wewnątrz pakietu w Oracle?