Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como verificar se uma coluna existe antes de adicioná-la a uma tabela existente em PL/SQL?


Todos os metadados sobre as colunas no Oracle Database podem ser acessados ​​usando uma das visualizações a seguir.

user_tab_cols; -- Para todas as tabelas de propriedade do usuário

all_tab_cols; -- Para todas as tabelas acessíveis ao usuário

dba_tab_cols; -- Para todas as tabelas do banco de dados.

Então, se você estiver procurando por uma coluna como ADD_TMS na tabela SCOTT.EMP e adicionar a coluna apenas se ela não existir, o código PL/SQL seria nessa linha.
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;
/

Se você planeja executar isso como um script (não parte de um procedimento), a maneira mais fácil seria incluir o comando alter no script e ver os erros no final do script, supondo que você não tenha Begin-End para o roteiro..

Se você tiver arquivo1.sql
alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;

E col2 está presente, quando o script é executado, as outras duas colunas seriam adicionadas à tabela e o log mostraria o erro dizendo que "col2" já existe, então você deve estar bem.