Reglas de construcción en PL/SQL
- Área: Especificaciones de Codificación y Construcción
- Tipo de pauta: Directriz
- Carácter de la pauta: Obligatoria
Se deben tener en cuenta las siguientes indicaciones para realizar una construcción basada en PL/SQL.
Pautas
Título | Carácter |
---|---|
Definición de variables | Obligatoria |
Tipos de datos específicos de la aplicación | Recomendada |
Constantes | Obligatoria |
Inicialización de variables complejas | Obligatoria |
Variables lógicas y funciones | Recomendada |
Borrado de código y variables en desuso | Obligatoria |
Limpieza de estructuras de datos | Obligatoria |
Conversiones implícitas de datos | Obligatoria |
Definiciones TYPE | Recomendada |
Variables globales | No Recomendada |
Expresiones estáticas | Obligatoria |
Estrategias de manejo de errores | Obligatoria |
Lanzamiento de excepciones | Obligatoria |
Sobrecarga de excepciones | No Recomendada |
Previsión de excepciones | Obligatoria |
Captura de excepciones desconocidas | Obligatoria |
Definición de variables
Utilizar %TYPE y %ROWTIPE para la definición de variables
Cuando se definen variables basadas en campos de tablas de nuestro modelo de datos debemos utilizar %TYPE y %ROWTYPE como atributos del tipo de datos. Esto se debe a que cualquier cambio en el tipo de un campo de una tabla de nuestro modelo de datos afectará al código fuente si estos atributos no son usados.
Tipos de datos específicos de la aplicación
Utilizar SUBTYPE para declarar tipos de datos específicos de la aplicación
Se recomienda usar SUBTYPE para crear tipos de datos personalizados a partir de un tipo existente en la base de datos.
Constantes
Usar CONSTANT para variables que no varían
Se declararán como constantes aquellas variables que no vayan a cambiar durante la ejecución. De este modo facilitaremos la interpretación del código y eliminaremos posibles errores.
Inicialización de variables complejas
Realizar la inicialización de una variable compleja en la sección ejecutable
Debemos asegurar que la inicialización lógica de la variable compleja se realiza al comienzo de la sección ejecutable y que no eleva un error. Si la asignación del valor por defecto se realiza en la sección de declaración y falla, entonces el error se propagará por el programa sin ser encapsulado.
Variables lógicas y funciones
Reemplazar las expresiones complejas por variables lógicas y funciones
Se recomienda usar variables lógicas y funciones en lugar de expresiones complejas para conseguir un código más legible.
Borrado de código y variables en desuso
Borrar código y variables que no se usen
Si conocemos una parte de un código o variable que no se va a usar más debemos eliminarla, asegurando previamente que no tiene más presencia en el código.
Limpieza de estructuras de datos
Limpiar las estructuras de datos cuando el programa termina
Debemos crear un procedimiento que limpie las estructuras de datos usadas e incluirlo en cada programa para que sea llamado al final de la sección ejecutable y en cada manejador de excepciones.
Conversiones implícitas de datos
Evitar las conversiones implícitas de tipos de datos
Se deben evitar las conversiones implícitas en el código para no tener problemas derivados de delegar la conversión de datos en PL/SQL, como una conversión inesperada de tipos o que las reglas de conversión cambien tras una nueva versión. Por ello, se deben utilizar las funciones predefinidas para la conversión.
Definiciones TYPE
Centralizar las definiciones TYPE en un paquete específico
Se recomienda crear paquetes para centralizar las definiciones de los tipos ya que permitirá reutilizar dichos tipos en distintos programas.
Variables globales
Evitar utilizar variables globales en los programas.
Las variables globales son peligrosas y deben evitarse ya que, al no ser pasadas a través de la lista de parámetros, es difícil saber cuándo se utilizan en un programa. Estas variables se suelen definir en paquetes, pero hay que tener en cuenta existirán y conservarán su valor durante toda la sesión.
Expresiones estáticas
Mover expresiones estáticas fuera de bucles y declaraciones SQL
Para mejorar los programas PL/SQL debemos extraer el código estático del cuerpo de los bucles, ya que la ejecución de dicho código estático se realizará tantas veces como iteraciones tenga el bucle. Para ello, el código estático se extraerá del cuerpo del bucle y se asignarán los resultados a variables que, posteriormente, serán llamadas dentro del bucle.
Estrategias de manejo de errores
Definir estrategias de manejo de errores previamente a empezar a codificar
Es muy importante conocer qué tipo de errores se nos pueden plantear y como manejarlos. Debemos definir una estrategia que asegure un manejador por cada excepción conocida, que informe del código de error y escriba el error en un fichero de registro.
Lanzamiento de excepciones
Lanzar excepciones sólo para indicar errores
Se levantarán excepciones sólo cuando se produzca un error y no para controlar el flujo del programa, por lo que no se debe usar RAISE para abortar el tratamiento normal de un programa y enviar la situación al manejador correspondiente.
Sobrecarga de excepciones
No sobrecargar una excepción con muchos errores
No debemos declarar una excepción que pueda ser lanzada por varios motivos, a menos que la pérdida de información sea intencionada, ya que puede dificultar la legibilidad y el entendimiento del código. En su lugar, se declarará una excepción por cada tipo de fallo.
Previsión de excepciones
Prever que puedan ocurrir excepciones
Debemos introducir manejadores de excepciones en aquellos lugares del código que sean susceptibles de producir excepciones.
Captura de excepciones desconocidas
Usar WHEN OTHERS sólo para excepciones que deben ser capturadas y son desconocidas
Debemos introducir la cláusula WHEN OTHERS sólo para excepciones que deben ser capturadas y son desconocidas.
Contenidos relacionados
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0736 | Implementación de reglas de construcción en PL/SQL | Ejemplo | Recomendado |
RECU-0107 | Manual de desarrollo en PL/SQL | Manual | Recomendado |