domingo, 8 de abril de 2012

Buenas Practicas en Programacion PL SQL


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