Construcción de scripts con ayuda del diccionario

Es bastante habitual si se trabaja con bases de datos que a menudo se tenga que realizar alguna tarea de creación o alteración de estructuras, análisis, recompilación, etc. sobre objetos de la base de datos. Para ello se suele crear un script con numerosas sentencias DDL, en las que la mayoría de las veces lo único que cambia es el nombre del objeto a tratar.
En estos casos puede ahorrarnos mucho trabajo la utilización del diccionario de la base de datos para construir estas sentencias dinámicamente.

Pondremos como ejemplo la creación de un nuevo campo para almacenar la fecha de creación de los registros en todas las tablas de un esquema de una base de datos ORACLE. Para ello utilizaríamos la siguiente sentencia:

SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME ||
' ADD FECHA_CREACION DATE DEFAULT SYSDATE;'
FROM ALL_TABLES
WHERE OWNER ='HR';

El resultado sería algo como esto:

ALTER TABLE HR.DEPARTMENTS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.EMPLOYEES ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.JOB_HISTORY ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.JOBS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.LOCATIONS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.REGIONS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.COUNTRIES ADD FECHA_CREACION DATE DEFAULT SYSDATE;

Ahora sólo restaría guardar estas sentencias en un script y
ejecutarlo, o lanzarlas directamente desde la aplicación que
utilicemos para interactuar con nuestra base de datos

Para el que tenga que (o prefiera) trabajar desde un terminal o linea
de comandos, la manera de hacer esto mismo con SQLPLUS sería la
siguiente:

SQL> SET HEADING OFF
SQL> SET FEEDBACK OFF
SQL> SPOOL C:\campo_auditoria.sql
SQL> SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME ||
' ADD FECHA_CREACION DATE DEFAULT SYSDATE;'
FROM ALL_TABLES
WHERE OWNER ='HR';
SQL> SPOOL OFF;
SQL> SET FEEDBACK ON
SQL> SET HEADING ON

Y finalmente ejecutar el script generado, aunque es recomendable una revisión previa de las sentencias generadas
SQL> @C:\campo_auditoria.sql

Reply

The content of this field is kept private and will not be shown publicly.
  • Lines and paragraphs break automatically.
  • Links to specified hosts will have a rel="nofollow" added to them.

  • Web page addresses and e-mail addresses turn into links automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.

Find with Google engine

Google