sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo verificar si existe una columna antes de agregarla a una tabla existente en PL/SQL?

Se puede acceder a todos los metadatos sobre las columnas en Oracle Database usando una de las siguientes vistas.

usuario_tab_cols; -- Para todas las tablas propiedad del usuario

todas_tab_cols; -- Para todas las tablas accesibles al usuario

dba_tab_cols; -- Para todas las tablas de la base de datos.

Entonces, si está buscando una columna como ADD_TMS en la tabla SCOTT.EMP y agrega la columna solo si no existe, el código PL/SQL estaría en esta línea.

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 planea ejecutar esto como un script (no como parte de un procedimiento), la forma más fácil sería incluir el comando alter en el script y ver los errores al final del script, asumiendo que no tiene Begin-End para el guión..

Si tiene file1.sql

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

Y col2 está presente, cuando se ejecuta el script, las otras dos columnas se agregarán a la tabla y el registro mostrará el error que dice que "col2" ya existe, por lo que debería estar bien.