2011-06-30 8 views
5

Nos encontramos con un problema particular con nuestra definición de tabla Oracle (DDL) y en uno de nuestros scripts PL/SQL.¿Cómo minimizar el acoplamiento/dependencia entre los cambios físicos de DDL y los cambios de PL/SQL?

La cuestión es, hubo un cambio en la tabla, el cambio de varchar(20) a varchar(30), este cambio sin embargo, no se reflejó con diligencia en una de las secuencias de comandos PL/SQL que consumen datos, que todavía estaba varchar(20), causando un error de ORA-06502: PL/SQL: numeric or value error durante una de nuestras pruebas de regresión.

me gustaría buscar asesoramiento de Oracle y expertos en bases de datos aquí, si se ha encontrado con este tipo de situaciones en el pasado, por lo que hubo cambios en la tabla de DDL, y no se reflejaron en el PL/SQL y cómo hacer frente a este brecha.

Sé que una manera fácil sería alguna forma de aplicación o papeleo, pero ¿podría haber una solución más bella o elegante, es decir, la forma en que las claves externas funcionan para evitar insertar/actualizar/eliminar anomalías?

¡Gracias!

Respuesta

6

Para empezar, usted debe declarar siempre sus variables como los tipos basados ​​en las definiciones de las columnas en las tablas:

Es decir, en lugar de:

dept_name VARCHAR2(50); 

Uso:

dept_name dept.dept_name%TYPE; 

Eso De esta forma, cuando su tabla base cambia, su declaración sigue siendo válida.

También puede declarar sus parámetros de procedimiento, así como los tipos:

PROCEDURE proc(p1 IN dept.dept_name%TYPE) 
+0

+1 Galleta, esto es genio, al menos para mí. –

+1

+1 Generalmente esto funciona bien. Aún debe tener cuidado si hay una expectativa de un límite de tamaño. Un ejemplo sería una dirección que se imprimirá en un sobre en el que una columna de base de datos ampliada no cabría. –

+0

@Chin Boon, sin duda fue algo que el equipo de diseño PL/SQL hizo bien! – DCookie

Cuestiones relacionadas