Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment vérifier si une colonne existe avant de l'ajouter à une table existante en PL/SQL ?

Toutes les métadonnées sur les colonnes d'Oracle Database sont accessibles à l'aide de l'une des vues suivantes.

user_tab_cols ; -- Pour toutes les tables appartenant à l'utilisateur

all_tab_cols ; -- Pour toutes les tables accessibles à l'utilisateur

dba_tab_cols ; -- Pour toutes les tables de la base de données.

Donc, si vous recherchez une colonne comme ADD_TMS dans la table SCOTT.EMP et que vous ajoutez la colonne uniquement si elle n'existe pas, le code PL/SQL ressemblera à ces lignes.

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

Si vous envisagez de l'exécuter en tant que script (ne faisant pas partie d'une procédure), le moyen le plus simple serait d'inclure la commande alter dans le script et de voir les erreurs à la fin du script, en supposant que vous n'avez pas de début-fin pour le scénario..

Si vous avez file1.sql

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

Et col2 est présent, lorsque le script est exécuté, les deux autres colonnes seraient ajoutées à la table et le journal afficherait l'erreur disant que "col2" existe déjà, donc ça devrait aller.