Pauta para variables y estructuras de datos
Declarar, definir el tipo, inicializar y asignar valor por defecto a las
estructura de datos antes
de trabajar con ellas.
PL/SQL es un
lenguaje fuertemente tipificado. Esto significa que antes de trabajar con cualquier
tipo de estructura de datos, es necesario declarar las mismas, definir el tipo
y opcionalmente inicializarlas o asignarles un valor por defecto. Las declaraciones deben realizarse en la sección
de declaración de variables de un bloque anónimo, procedimiento, función
o paquete.
En las declaraciones que se relacionan a tablas y columnas utilizar la
cláusula
%TYPE
y
%ROWTYPE
Esta forma permite al código adaptarse a cambios de estructuras de datos y auto documentarse,
ya que al leer el código se puede saber a que tipo de dato hace referencia. Para el tipo
VARCHAR2
, Oracle
separa la memoria necesaria según la longitud definida. Es muy común ‘Hardcodear’ la longitud del mismo a su máxima tamaño para
evitar problemas, a costo de utilizar mas memoria de la necesaria. Aquí
nuevamente se hace conveniente el uso de
%TYPE
O
%SUBTYPE
para un mejor aprovechamiento de los recursos de memoria.
En los datos numéricos, definir la
precisión.
Oracle soporta hasta 38 dígitos de precisión en los tipos NUMBER
. Si no se define enforma
correcta se está derrochando memoria.
Usar declaración de constantes para valores que
no cambian durante la
ejecución del programa.
Permite
que ciertos valores no sean modificados por otros desarrolladores y asegura que
los
datos que se consideran confidenciales o que se utilizan en fórmulas oparametrizaciones
no sean manipulados en los códigos.
Siempre que sea posible, utilizar el tipo de dato
RECORD
para manejar estructuras
La declaración de variables
individuales o dispersión de datos, muchas veces, complica la lectura del código.
La agrupación de los mismos
bajo estructuras, facilita la
administración y el mantenimiento del código.
Realizar
inicializaciones complejas de variables en la sección de ejecución de programa.
Los errores de un código solo pueden ser capturados en la sección
ejecutable de un bloque.
Si la inicialización de una variable en la sección de declaración falla, el error
no se puede manejado. Para ello hay que
asegurar que la inicialización lógica no falle y esto se asegura haciendo las inicializaciones al comienzo de la
sección de ejecución. Si se produce un error,
se puede capturar el error y decidir su tratamiento.
Reemplazar expresiones complejas con variable s booleanas y funciones.
Las
expresiones booleanas se pueden evaluar con tres valores:
TRUE,
FALSE o NULL.
Se pueden usar variables de este tipo para ocultar
expresiones complejas. Comoconsecuencia
se puede leer mas fácilmente el código y es mas simple sumantenimiento.
Remover variables y código no usado.
En determinadas circunstancias los códigos son modificados a medida que
transcurre el tiempo, la lógica cambia y a veces se declaran variables que no se usan,
se escribe código que en un momento era
necesario o que se quiere mantener activado por un momento, pero después no se recuerda cual fue
el motivo del mismo. Para mantener todo mas claro, es conveniente
eliminar esos puntos que conducen a zonas
muertas. Una práctica para esto consiste en eliminar las variables que solo aparecen en la zona
de declaración. Existen varios productos que simplifican esta
tarea.
Es mucho más simple entender, realizar seguimientos o mantener códigos que no tienen
‘zonas muertas’. A modo de ejemplo se incluye un código con algunos
errores:
Lo que se
puede observar es lo siguiente:
- · p_Importe está declarado, no se usa y no tiene asignación por defecto, por lo cual el valor es totalmente ignorado.
- · l_contador está declarada, pero no se usa.
- · l_fecha_movimiento está asignado con sysdate e inmediatamente recibe el valor der_cuenta.fecha_ult_mov (p_nro_cuenta);.
- · La llamada a armar_carta se desactivo con el agregado de FALSE.
- · La llamada a pkg_procesos_cuenta.iniciar_control esta comentada.
Utilizar
rutinas de cierre
o limpieza cuando
los programas terminan
(en ejecución normal o por error)
En algunos escenarios es crucial tener rutinas de cierre o limpieza, las
cuales se deben incluir
al finalizar
el programa y al final
de cada excepción. Generalmente
son aplicables
para el uso de cursores y manejo de archivos. A continuación se muestra ejemplos:
Se puede observar que tanto el cursor, como el archivo quedan abiertos en
caso de existir alguna excepción.
Ahora se puede ver que se definió la rutina que realiza el cierre de
archivo y de cursor. Este tipo de práctica
evita que se produzcan errores que indiquen que el archivo está en uso o que el
cursor ya se encuentra abierto, cuando la rutina es llamada de distintos puntos,
además que facilita a otros desarrolladores
agregar nuevas estructuras y contemplar el cierre o limpieza de las mismas.
Tener cuidado con las conversiones implícitas de tipos de datos.
Si bien es
sabido que PL/SQL maneja las conversiones implícitas, existen al menos dos grandes
problemas con esto. Las conversiones no son intuitivas, a veces se realizan de
formas no esperadas y ocurren problemas, especialmente dentro de sentencias
SQL.Las reglas de conversión no están bajo el control de desarrollador. Pueden
cambiar conel upgrade a una versión de Oracle
o con el cambio de parámetros como NLS_DATE_FORMAT
Se puede convertir con el uso explícito de funciones como son:
TO_DATE, TO_CHAR,TO_NUMBER y CAST
Para mas informacion.
http://es.scribd.com/nagual95/d/54287879-Manual-de-Buenas-Practicas-de-Desarrollo-en-PLSQL#download
No hay comentarios:
Publicar un comentario