estandar programacion plsql

Upload: algunootro

Post on 14-Jul-2015

308 views

Category:

Documents


7 download

TRANSCRIPT

Estndar de Programacin PL/SQL

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 1/113 Identificacin Pendiente

Estndar de Programacin PL/SQLVersin Descripcin Autor Fecha Revisado por

1.0.0 1.0.1 1.1.1 1.2.0

Original Modificacin Modificacin Modificacin

Arquitectura de Software Arquitectura de Software Arquitectura de Software Arquitectura de Software

05/09/2008 09/09/2008 13/11/2008 29/09/2011

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 2/113 Identificacin Pendiente

Estndar de Programacin PL/SQL TABLA DE CONTENIDOS1.000 Introduccin ........................................................................................................................................................................................ 9 2.000 Alcance.............................................................................................................................................................................................. 10 3.000 Buenas Prcticas ............................................................................................................................................................................... 11 3.010 Nomenclatura .............................................................................................................................................................................. 11 3.010.1 Nombre de la aplicacin ...................................................................................................................................................... 11 3.010.2 Lenguaje de nomenclatura .................................................................................................................................................. 11 3.010.3 Mayscula y minscula ....................................................................................................................................................... 12 3.010.4 Uso de Prefijos en identificadores de objetos de cdigo PL/SQL......................................................................................... 12 3.010.5 Uso de Sufijos para objetos de base de datos ..................................................................................................................... 13 3.010.6 No utilizar artculos ni preposiciones .................................................................................................................................. 14 3.010.7 Sintaxis de identificadores ................................................................................................................................................... 14 3.020 Tablas .......................................................................................................................................................................................... 15 3.020.1 Prefijo de nombre de tabla .................................................................................................................................................. 15 3.020.2 Nombre en plural ................................................................................................................................................................ 16 3.020.3 Utilizacin de abreviaturas en el nombre ............................................................................................................................ 16 3.020.4 Separacin de palabras en el nombre ................................................................................................................................. 16 3.020.5 Longitud de nombre ............................................................................................................................................................ 17 3.020.6 Alias para la tabla ................................................................................................................................................................ 17 3.020.7 Creacin de Comment ......................................................................................................................................................... 17 3.030 Vistas ........................................................................................................................................................................................... 17 3.030.1 Nombre en plural ................................................................................................................................................................ 17 3.030.2 Prefijo de nombre de vista .................................................................................................................................................. 18 3.030.3 Uso del mismo nombre que la tabla .................................................................................................................................... 18 3.040 Columnas (tablas y vistas)............................................................................................................................................................ 18 3.040.1 Nombre en singular ............................................................................................................................................................. 18 3.040.2 Reutilizacin de Definicin de Columnas............................................................................................................................. 18 3.040.3 Ausencia de prefijo de tabla ................................................................................................................................................ 19 3.040.4 Separacin de palabras en el nombre ................................................................................................................................. 19 3.040.5 Longitud del nombre ........................................................................................................................................................... 19 3.040.6 Utilizacin de abreviaturas en el nombre ............................................................................................................................ 19 3.040.7 Identificadores de internos de registro (claves primarias auto generadas) ......................................................................... 20 3.040.8 Seleccin de Primary Keys ................................................................................................................................................... 20 3.040.9 Foreign key columns............................................................................................................................................................ 20 3.040.10 Orden de columnas dentro de tablas ................................................................................................................................ 21 3.040.11 Tipos de datos de las columnas ......................................................................................................................................... 22 3.040.12 Tipo de Dato en el nombre de columna ............................................................................................................................ 22

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 3/113 Identificacin Pendiente

Estndar de Programacin PL/SQL3.050 Primary Keys ................................................................................................................................................................................ 22 3.050.1 Nombre ............................................................................................................................................................................... 22 3.050.2 Orden de las columnas ........................................................................................................................................................ 22 3.060 Unique Keys ................................................................................................................................................................................. 22 3.060.1 Nombre ............................................................................................................................................................................... 22 3.060.2 Orden de las columnas ........................................................................................................................................................ 23 3.070 Foreign Keys ................................................................................................................................................................................ 23 3.070.1 Nombre ............................................................................................................................................................................... 23 3.080 Check Constraints ........................................................................................................................................................................ 23 3.080.1 Validacin de reglas ............................................................................................................................................................ 23 3.080.2 Nombre ............................................................................................................................................................................... 24 3.090 Sequencias ................................................................................................................................................................................... 24 3.090.1 Nombre ............................................................................................................................................................................... 24 3.0100 Indices ....................................................................................................................................................................................... 25 3.0100.1 Pautas de Indizacin .......................................................................................................................................................... 25 3.0100.2 Nombre de ndices ............................................................................................................................................................ 26 3.0100.3 Indices y valores Null ......................................................................................................................................................... 26 3.0100.4 Creacin de ndices para foreign keys ............................................................................................................................... 26 3.0100.5 No crear ndices nicos ..................................................................................................................................................... 27 3.0100.6 Orden de columnas de ndices para FKs ............................................................................................................................ 27 3.0100.7 Pautas para ndices compuestos ....................................................................................................................................... 27 3.0100.8 ndices basados en funciones ............................................................................................................................................ 27 3.0100.9 ndices y Constraints ......................................................................................................................................................... 28 3.0100.10 ndices de clave invertida ................................................................................................................................................ 28 3.0100.11 Pautas para ndices Bitmap ............................................................................................................................................. 29 3.0100.12 ndices particionados. ..................................................................................................................................................... 29 3.0110 Triggers ...................................................................................................................................................................................... 30 3.0110.1 Nombre ............................................................................................................................................................................. 30 3.0110.2 Lgica simple ..................................................................................................................................................................... 31 3.0120 Sinonimos .................................................................................................................................................................................. 31 3.0120.1 Un sinnimo publico por objeto ........................................................................................................................................ 31 3.0120.2 Sinnimo con el mismo nombre que el objeto .................................................................................................................. 31 3.0130 Excepciones ............................................................................................................................................................................... 32 3.0130.1 Utilizar excepciones ........................................................................................................................................................... 32 3.0130.2 Utilizar el package err_msg de excepciones ................................................................................................................... 33 3.0130.3 Una excepcin debe representar un nico error ............................................................................................................... 34 3.0130.4 Manejar excepciones que puedan ser anticipadas ............................................................................................................ 34 3.0130.5 No hardcodear cdigos de error ....................................................................................................................................... 35

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 4/113 Identificacin Pendiente

Estndar de Programacin PL/SQL3.0130.6 Captura de excepciones .................................................................................................................................................... 36 3.0130.7 Emular excepciones nombradas por constantes en packages ........................................................................................... 37 3.0130.8 Las rutinas deben documentar las excepciones ................................................................................................................ 39 3.0130.9 Utilizar PRAGMA_EXCEPTION INIT .................................................................................................................................... 39 4.000 Estilo de Programacin ............................................................................................................................................................ 41 4.010 Generalidades.............................................................................................................................................................................. 41 4.010.1 Mayscula y minscula ....................................................................................................................................................... 41 4.010.2 Empaquetado de Procedimientos y Funciones ................................................................................................................... 43 4.010.3 Modularizacin.................................................................................................................................................................... 43 4.010.4 Llamada a Stored Procedures y Cursores ............................................................................................................................ 43 4.010.5 Especificacin del nombre del modulo en la sentencia END ............................................................................................... 44 4.010.6 Definicin de secciones para paquetes ............................................................................................................................... 44 4.010.7 Especificacin de Parmetros .............................................................................................................................................. 45 4.010.8 Descripciones de cabecera de Stored Procedures y Mdulos ............................................................................................. 46 4.020 Indentacin.................................................................................................................................................................................. 47 4.020.1 Estilo sentencia SELECT ....................................................................................................................................................... 47 4.020.2 Estilo sentencia INSERT ....................................................................................................................................................... 49 4.020.3 Estilo sentencia UPDATE ..................................................................................................................................................... 50 4.020.4 Estilo sentencia DELETE ....................................................................................................................................................... 51 4.020.5 Estilo bloques generales PL/SQL.......................................................................................................................................... 51 4.020.6 Estilo comando IF THEN ELSE ELSIF ..................................................................................................................................... 52 4.020.7 Estilo comando LOOP .......................................................................................................................................................... 54 4.020.8 Estilo comando WHILE LOOP ............................................................................................................................................... 54 4.020.9 Estilo comando FOR LOOP ................................................................................................................................................... 55 4.020.10 Estilo Especificacin de Stored Procedure ......................................................................................................................... 56 4.030 Estructuras de datos .................................................................................................................................................................... 57 4.030.1 Definir los tipos de datos segn su uso ............................................................................................................................... 57 4.030.2 Usar %TYPE y %ROWTYPE ................................................................................................................................................... 58 4.030.3 No fijar longitud de los VARCHAR2 ...................................................................................................................................... 58 4.030.4 Centralizar definiciones de tipos ......................................................................................................................................... 59 4.030.5 Utilizar constantes ............................................................................................................................................................... 60 4.030.6 Crear packages de constantes ............................................................................................................................................. 60 4.030.7 Inicializacin de variables .................................................................................................................................................... 62 4.030.8 Ocultar expresiones complejas............................................................................................................................................ 63 4.030.9 No recargar el uso de estructuras de datos ......................................................................................................................... 64 4.030.10 Limpiar las estructuras de datos ........................................................................................................................................ 65 4.030.11 Evitar conversiones de tipos de datos implcitas ............................................................................................................... 67 4.030.12 No usar variables globales ................................................................................................................................................. 68

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 5/113 Identificacin Pendiente

Estndar de Programacin PL/SQL4.030.13 Programar modularmente................................................................................................................................................. 69 4.030.14 Utilizar templates para packages y funciones empaquetadas ........................................................................................... 69 4.030.15 Reglas de negocios definidas en funciones ....................................................................................................................... 69 4.030.16 No usar procedures o funciones stand-alone .................................................................................................................... 69 4.030.17 Encapsular estructuras de datos y funcionalidad relacionada en un solo paquete ........................................................... 70 4.030.18 Poner la lgica del negocio en packages con interfaces bien definidas ............................................................................. 71 4.030.19 Construir especificacin de paquetes antes que el Package body ..................................................................................... 73 4.030.20 Uso de packages para informacin persistente ................................................................................................................. 73 4.030.21 Llamada a procedimientos con parmetros con nombre .................................................................................................. 74 4.030.22 Efectos Laterales ............................................................................................................................................................... 75 4.030.23 Sentencia RETURN en funciones ....................................................................................................................................... 76 4.030.24 Evitar parmetros [IN] out en funciones ........................................................................................................................... 77 4.030.25 Evitar implementacin de mdulos innecesarios .............................................................................................................. 78 4.030.26 Simplificar el uso de mdulos con OVERLOADING ............................................................................................................ 78 4.030.27 Consolidar mtodos de OVERLOADING ............................................................................................................................. 79 4.040 Estructuras de control ................................................................................................................................................................. 82 4.040.1 Uso del ELSIF ....................................................................................................................................................................... 82 4.040.2 Uso del IF - ELSIF.................................................................................................................................................................. 82 4.040.3 Sentencias IF y expresiones booleanas................................................................................................................................ 83 4.040.4 Evitar sentencias EXIT y RETURN en bloques LOOP ............................................................................................................. 83 4.040.5 Utilizar FOR y WHILE ........................................................................................................................................................... 84 4.040.6 Indices de bucles FOR .......................................................................................................................................................... 84 4.040.7 Iteracin de colecciones ...................................................................................................................................................... 84 4.040.8 Expresiones estticas y bucles ............................................................................................................................................. 85 4.040.9 No utilizar GOTO ................................................................................................................................................................. 85 4.050 Triggers ........................................................................................................................................................................................ 85 4.050.1 Tamaos de los triggers ...................................................................................................................................................... 85 4.050.2 Reglas de negocios definidas en triggers ............................................................................................................................. 86 4.050.3 Valores de columnas derivadas ........................................................................................................................................... 87 4.060 Manejo de cursores ..................................................................................................................................................................... 87 4.060.1 Cursores .............................................................................................................................................................................. 87 4.060.2 Usar registros para fetch de cursores .................................................................................................................................. 89 4.060.3 Utilizar cursor FOR-LOOP para procesar cursores ............................................................................................................... 90 4.060.4 No usar cursor FOR-LOOP para fetch de una fila ................................................................................................................. 90 4.060.5 Especificar columnas a actualizar en SELECT FOR UPDATE.................................................................................................. 91 4.060.6 Parametrizar cursores explcitos ......................................................................................................................................... 92 4.060.7 Uso del ROWCOUNT............................................................................................................................................................ 93 4.060.8 Definir cursores de mltiples filas en packages ................................................................................................................... 93

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 6/113 Identificacin Pendiente

Estndar de Programacin PL/SQL4.070 SQL dentro de PL/SQL.................................................................................................................................................................. 94 4.070.1 Autonomous Transactions................................................................................................................................................... 94 4.070.2 Encapsular consultas de una fila en funciones .................................................................................................................... 95 4.070.3 Ocultar el uso de la tabla DUAL ........................................................................................................................................... 95 4.070.4 Evitar innecesario uso de COUNT ........................................................................................................................................ 96 4.070.5 Referenciar atributos de cursores inmediatamente despus de la operacin SQL ............................................................. 97 4.070.6 Utilizar clusula RETURNING ............................................................................................................................................... 98 4.070.7 Usar clusula BULK COLLECT ............................................................................................................................................... 98 4.070.8 Encapsular sentencias DML en llamadas a procedures ....................................................................................................... 99 4.070.9 Usar Bind Variables en SQL Dinmico................................................................................................................................ 100 4.070.10 Formatear SQL dinmicos ............................................................................................................................................... 101 4.070.11 Optimizacin basada en costos ....................................................................................................................................... 101 4.070.12 No utilizar hints en SQL ................................................................................................................................................... 101 4.070.13 Evitar el uso de Sorts ...................................................................................................................................................... 102 4.070.14 Uso de Exists vs IN ........................................................................................................................................................... 102 4.080 Seguridad................................................................................................................................................................................... 103 4.080.1 Asignacin de privilegios mediante roles .......................................................................................................................... 103 4.080.2 Asignar roles de acuerdo a niveles de autorizacin para cada aplicacin ......................................................................... 104 4.080.3 Crear de un paquete de acceso a cada tabla ..................................................................................................................... 104 4.080.4 Nunca asignar privilegios de acceso a tablas ..................................................................................................................... 104 4.080.5 Usar el usuario del esquema para desarrollo .................................................................................................................... 104 4.080.6 Minimizar el nmero de privilegios por defecto ............................................................................................................... 105 4.090 Escalabilidad .............................................................................................................................................................................. 105 4.090.1 Acceso masivo a datos ...................................................................................................................................................... 105 4.0100 Trazabilidad ............................................................................................................................................................................. 106 4.0100.1 Realizar o utilizar un plan de trazabilidad para cada organizacin y/o sistema. .............................................................. 106 4.0100.2 Usar esquema monousuario y multisesin para desarrollo de aplicaciones ................................................................... 106 4.0100.3 Usar un paquete especial para la trazabilidad ................................................................................................................. 107 4.0100.4 Sincronizar la sesin de aplicacin con la sesin de base de datos ................................................................................. 108 4.0110 Documentacin de PLSQL ........................................................................................................................................................ 108 4.0110.1 Objetos a documentar..................................................................................................................................................... 109 4.0110.2 Objetos a documentar..................................................................................................................................................... 109 4.0110.3 Documentacin en cdigo fuente ................................................................................................................................... 109 4.0110.4 Keywords permitidos ...................................................................................................................................................... 109 4.0110.5 Comienzo y trmino de la documentacin ...................................................................................................................... 110 4.0110.6 Formato de documentacin ............................................................................................................................................ 110 4.0110.7 Formato de keywords...................................................................................................................................................... 110 4.0110.8 Formato de nombres de objetos asociados a keywords ................................................................................................. 111

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 7/113 Identificacin Pendiente

Estndar de Programacin PL/SQL4.0110.9 Espacios entre keywords ................................................................................................................................................. 111 4.0110.10 Formato de nombres de objetos asociados a keywords ............................................................................................... 111 4.0110.11 Formato de descripciones de objetos asociados a keywords ........................................................................................ 112 4.0110.12 Formato de keyword parameters .................................................................................................................................. 112 4.0110.13 Formato de keyword parameters .................................................................................................................................. 112 4.0110.14 Formato de links ............................................................................................................................................................ 112

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 8/113 Identificacin Pendiente

Estndar de Programacin PL/SQL

1.000 IntroduccinEl objetivo de este documento es definir un estndar de creacin de objetos dentro del ambiente de bases de datos Oracle y no Oracle. Este documento definir las directivas de nomenclatura y estructuracin de los objetos de la base de datos basadas en buenas prcticas, las cuales se recomendarn dentro de todos los proyectos de desarrollo.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 9/113 Identificacin Pendiente

Estndar de Programacin PL/SQL

2.000 AlcanceGua para el desarrollo en Base de datos Oracle y no Oracle (para los casos en que puedan aplicarse). Estndar base de creacin de objetos de base de datos para proyectos externos que necesiten de una definicin de estndares personalizados.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 10/113 Identificacin Pendiente

Estndar de Programacin PL/SQL

3.000 Buenas Prcticas3.010 Nomenclatura3.010.1 Nombre de la aplicacina) Regla Definir un nombre para la aplicacin o mdulo de aplicacin y seleccionar una abreviatura de 3 caracteres para la misma. Utilizar esta abreviatura para nombrar los objetos que son propios de la aplicacin o el mdulo de la aplicacin. b) Motivacin La abreviatura del nombre de la aplicacin puede ser utilizada en varios estndares de nombres para objetos del sistema. Dado que los nombres de objetos generalmente tienen un lmite de tamao, es til disponer de un cdigo corto para referirse a la aplicacin. Por otro lado, es til disponer de una abreviatura para referirse al sistema en informes y documentacin. c) Ejemplo

Nombre del sistema: Sistema de Gestin de Recursos Humanos Abreviatura: SRH

d) Beneficios Permite distinguir fcilmente con el prefijo asignado a los objetos a que aplicacin pertenece. Permite la reutilizacin de nombres de un mismo concepto representado en un objeto de base de datos para aplicaciones distintas. Desde este punto del documento en adelante nos referiremos a la abreviacin de la aplicacin como [APP]

3.010.2 Lenguaje de nomenclaturaa) Regla Definir el lenguaje que se aplicar en el desarrollo de la aplicacin completa para mantener el mismo en todos los objetos que pertenezcan a la aplicacin. b) Motivacin Prolijidad y consistencia sobre los nombres de los objetos. c) Ejemplo No usar combinacin de lenguajes:SRH_TYPE_EMPLEADOS

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 11/113 Identificacin Pendiente

Estndar de Programacin PL/SQL

Objetos de la misma aplicacin con distintos lenguajesSRH_EMPLEADOS SRH_EMPLYEE_TYPE

d) Beneficios Facilidad de interpretacin de los conceptos. Prolijidad. Evitar la creacin duplicada de objetos que representan el mismo concepto con distintos nombres. e) Desafo

Determinar las palabras que puedan ser utilizadas en forma estandarizada en un lenguaje determinado. Por ejemplo en el caso de palabras de uso comn que convengan mantener en ingls sin importar el lenguaje elegido, como por ejemplo la palabra FLAG como sufijo de columnas que representan estados.

3.010.3 Mayscula y minsculaa) Regla Definir una forma de notacin consistente de los nombres de los objetos teniendo en cuenta que los objetos en la base de datos NO SON CASE SENSITIVE, es decir, los nombres no se diferencian por el uso de maysculas y minsculas. b) Motivacin Prolijidad y legibilidad de cdigo SQL y/o PL/SQL. Identificacin simple de objetos de datos dentro de una sentencia de cdigo. c) Ejemplo

En el estndar de codificacin PL/SQL se define que los identificadores de los objetos de base de datos se escriban todos en minscula. En documentos en los que se mezcla lenguaje comn con nombres de objetos se recomienda resaltar los nombres de los objetos con mayscula o entre comillas, no siendo as para el caso de cdigo PL/SQL en que se recomienda escribir los nombres de los objetos en minscula y las palabras reservadas en mayscula. Los nombres de los objetos se presentarn en mayscula con el fin de resaltar los mismos dentro del lenguaje comn de escritura.

3.010.4 Uso de Prefijos en identificadores de objetos de cdigo PL/SQLd) Regla Utilizar prefijos para nombrar los identificadores de objetos de cdigo PL/SQL.Cambio Pendiente Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 12/113 Identificacin Pendiente

Estndar de Programacin PL/SQLe) Motivacin

Diferenciar columnas de tablas de variables o estructuras de datos e identificacin sencilla de distintos objetos de cdigo. f) Listado de Prefijos Estndares Prefijo

Tipo de identificador

Constantes Tipos Type y Subtype Index by table Nested Table Collection Varray Ref Cursor Variables Excepciones Parmetros

c_ t_ ti_ tn_ tv_ trc_ v_ e_ p_ (para el caso de parmetros de cursores se puede utilizar pc_ con el fin de diferenciar los parmetros del mdulo del cursor en el pasaje de parmetros) cur_

Cursores

3.010.5 Uso de Sufijos para objetos de base de datosg) Regla Utilizar sufijos para nomenclar los identificadores de objetos base de datos. Esta regla tambin se aplica para procedimientos y funciones de paquetes. h) Motivacin Identificar los distintos tipos de objetos dentro del cdigo PL/SQL, en los mensajes de errores estndares y en las tareas de mantenimiento de los mismos dentro del diccionario de datos de la base de datos y/o herramientas de soporte de desarrollo como los versionadores de cdigo fuente. i) Listado de Sufijos Estndares Sufijo

Tipo de Objeto

Procedure Function Package Sequence Trigger ViewCambio Pendiente

_PRC _FN _PKG _SEQ _TRG _VW

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 13/113 Identificacin Pendiente

Estndar de Programacin PL/SQL3.010.6 No utilizar artculos ni preposicionesa) Regla No deben utilizar preposiciones ni artculos dentro de los identificadores. b) Ejemplo detalle de las facturas debera abreviarse a det_fact

3.010.7 Sintaxis de identificadoresa) Regla Para el caso de procedimientos utilizar frases verbales que representen la accin que llevar a cabo el procedimiento. Para el caso de funciones utilizar sustantivos que describan el resultado de la funcin. Para el caso de paquetes el nombre debe ser genrico que represente un concepto que englobe el conjunto de objetos a definirse dentro del mismo. Para el caso de variables y tipos se debe especificar una descripcin de lo que representa. b) Motivacin Facilitar la identificacin de tipo de mdulo dentro del cdigo y facilitar el entendimiento de la lgica mediante la utilizacin de identificadores similares al lenguaje natural. c) Ejemplo

PROCEDURE calcular_ventas_prod_empl_prc( p_id_empleado IN srh_empleados.id_empleado%TYPE, p_cod_producto IN com_productos.cod_producto%TYPE, p_fecha_desde IN DATE, p_fecha_hasta IN DATE, p_monto_total_venta OUT com_resumen_ventas.monto_total%TYPE, p_cant_total_venta OUT com_resumen_ventas.cant_total%TYPE, ); FUNCTION identificador_empleado_fn( p_cod_empleado IN srh_empleados.cod_empleado%TYPE ) RETURN srh_empleados.id_empleado%TYPE; FUNCTION existe_empledo_fn( p_cod_empleado IN srh_empleados.cod_empleado%TYPE ) RETURN BOOLEAN;

Aplicados dentro del cdigo: -- verificamos si se existe el empleado del cdigo cargado IF existe_empledo_fn(v_codigo_empleado) THEN -- buscamos el identificador del empleado para el proceso de calculo de venta

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 14/113 Identificacin Pendiente

Estndar de Programacin PL/SQLv_id_empleado := identificador_empleado_fn(v_codigo_empleado); -- calculamos el total de venta para el producto para el empleado calcular_ventas_prod_empl_prc( p_id_empleado => v_id_empleado, p_cod_producto => v_cod_producto, p_fecha_desde => v_fecha_desde, p_fecha_hasta => v_fecha_hasta p_monto_total_venta => v_monto_total_venta, p_cant_total_venta => v_cant_total_venta, ); END IF; .

Con esta forma de nombrar los mdulos los comentarios pasan a ser redundantes dentro del cdigo. d) Desafo Definir un conjunto estndar de prefijos para los nombres para mantener una consistencia en la generacin de estos identificadores. Por ejemplo en para el caso de los procedimientos que recuperan un valor utilizar siempre el prefijo recuperar_: recuperar_listado_empleado, recuperar_identif_producto, etc.

3.020 Tablas3.020.1 Prefijo de nombre de tablaa) Regla Los nombres de tablas no tendrn prefijo ni postfijo de tipo de objeto. Es decir, no se le agregarn caracteres al nombre del objeto slo para indicar que se trata de una tabla. Pero se agregar un prefijo de nombre de aplicacin separado con un underscore _. b) Motivacin Evitar conflictos de nombres con otras aplicaciones. c) Ejemplo La tabla de personas deber llamarse SRH_PERSONAS. d) Beneficios Permite la reutilizacin de un mismo nombre de objeto en distintas aplicaciones. No se producen conflictos de nomenclatura al momento del uso de sinnimos pblicos para la administracin de seguridad. e) Desventajas Se extiende el nombre de las tablas por el prefijo. En el caso de que exista la posibilidad de reutilizacin de componentes o mdulos del sistema, se debern cambiar los nombres de los objetos. Por ejemplo si se trata de una

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 15/113 Identificacin Pendiente

Estndar de Programacin PL/SQLtabla general de logueo de errores, se debe cambiar el nombre general de la tabla para cada aplicacin.

3.020.2 Nombre en plurala) Regla Los nombres de las tablas sern en plural. La pluralidad se debe aplicar sobre el nombre del concepto base. b) Ejemplo SRH_DIRECCIONES_EMPLEADO la pluralidad se aplica solo sobre direcciones que es el concepto base.

3.020.3 Utilizacin de abreviaturas en el nombrea) Regla Se priorizar la claridad de la interpretacin del concepto que representa la tabla ante la abreviacin, sin embargo en caso de que se trate de conceptos con composicin de palabras, se debern utilizar abreviaturas para los nombres de tablas, tratando de no abreviar el concepto base. La lista de abreviaturas utilizadas en el sistema debern formar parte de la documentacin. b) Ejemplo La tabla direcciones de personas SRH_DIRECCIONES_EMPL, donde la direccin es el concepto base. c) Desventaja Muchas abreviaturas no distinguirn entre plural y singular. d) Desafo Definir un conjunto basto de abreviaciones y principalmente que sean de conocimiento pblico y concensuadas con el resto del equipo. Utilizar nombres y abreviaturas uniformes en todo el sistema. Es decir reutilizar las mismas convenciones de nomenclatura en todo el desarrollo.

3.020.4 Separacin de palabras en el nombrea) Regla Las palabras sern separadas por _ (underscore) UNICAMENTE. Los nombres de los objetos en la base de datos no son CASE SENSITIVE. b) Ejemplo Los nombres que utilizan mayscula y minscula para separar las palabras NO son validos: SRhTiposEmpleado

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 16/113 Identificacin Pendiente

Estndar de Programacin PL/SQLEn su lugar deberia ser : SRH_TIPOS_EMPLEADO

3.020.5 Longitud de nombrea) Regla Los nombres de tabla no deben exceder los 20 caracteres ms la longitud del prefijo de aplicacin. b) Beneficios La limitacin de la longitud mxima obliga al uso de abreviaturas. Sin embargo no se debe abreviar demasiado. Facilita la escritura de sentencias SQL y cdigo PLSQL.

3.020.6 Alias para la tablaa) Regla Adems del nombre, cada tabla deber tener asignado un alias. El mismo ser una abreviatura del nombre de a lo sumo 5 caracteres que no incluir el prefijo de aplicacin y sin separacin de underscore. b) Motivacin Los alias de tablas son utilizados en estndares de nombres de otros objetos de base de datos. Dado que los nombres de objetos generalmente tienen un lmite de tamao, es til disponer de un cdigo corto para referirse a la tabla. c) Ejemplo Para la tabla SRH_EMPLEADOS se define el alias EMPL.

3.020.7 Creacin de Commenta) Regla Crear comentarios (COMMENT) para todas las tablas con una breve descripcin del concepto que representa la misma. b) Motivacin El esquema posee en si misma documentacin, proporcionando una explicacin rpida de los conceptos del mismo. Nota: Aplicar esta prctica tambin a nivel de columnas de las tablas.

3.030 Vistas3.030.1 Nombre en plurala) Regla Los nombres de vistas sern en plural.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 17/113 Identificacin Pendiente

Estndar de Programacin PL/SQL3.030.2 Prefijo de nombre de vistaa) Regla Utilizar la siguiente convencin para los nombres de vistas: [app]_[nombre lgico]_VW b) Ejemplo SRH_EMPLEADOS_VW

3.030.3 Uso del mismo nombre que la tablaa) Regla En caso de que la vista represente la estructura bsica de una tabla con fines de seguridad en acceso utilizar el mismo nombre que la tabla, agregando el sufijo de vista. b) Ejemplo Para la tabla SRH_EMPLEADOS se crea la vista SRH_EMPLEADOS_VW

3.040 Columnas (tablas y vistas)3.040.1 Nombre en singulara) Regla Los nombres de columnas sern en singular. La excepcin a la regla son las columnas multivaluadas (collections, varrays). b) Motivacin Un nombre de columna en plural indica la posible necesidad de adicin de columnas o la normalizacin de la columna en una tabla hijo.

3.040.2 Reutilizacin de Definicin de Columnasa) Regla Los campos de distintas tablas que hacen referencia al mismo concepto general deben utilizar el mismo nombre, con idntico tipo y longitud. b) Motivacin Permite identificar el mismo concepto representado por la columna en todas las tablas que lo utilizan. c) Ejemplo Un ejemplo comn es definir las columnas de auditoria y utilizarlas en todas las tablas:USUARIO_CREACION VARCHAR2(30) FECHA_CREACION DATE USUARIO_ULTIMA_MOD VARCHAR2(30)

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 18/113 Identificacin Pendiente

Estndar de Programacin PL/SQLFECHA_ULTIMA_MOD DATE

Otro ejemplo podra ser por ejemplo una columna que representa FECHA_EMISION para las tablas REMITOS y FACTURAS. d) Desafo Conocer la existencia de los conceptos representado en las columnas del esquema que pueden ser utilizados en otras tablas. Mantener la consistencia de los tipos de datos y/o los nombres con respecto al concepto que representa.

3.040.3 Ausencia de prefijo de tablaa) Regla No utilizar prefijo de tabla para los nombres de columnas (a excepcin del ID ). El prefijo no es necesario dado que en queries o vistas, las columnas deben ser referenciadas mediante el alias de tabla (Ver estndar de PL/SQL). Por ejemplo:SELECT FROM prs.nombre srh_personas prs;

En el caso en que en una vista (o consulta) surjan conflictos de nombres de columnas duplicadas, las columnas seleccionadas debern tener un alias compuesto de un prefijo de tabla y el nombre de columna. Por ejemplo:SELECT prs.id prs_id, dpt.id dpt_id FROM srh_personas prs, departamentos dpt WHERE ..... ;

3.040.4 Separacin de palabras en el nombrea) Regla Las palabras sern separadas por _ (underscore).

3.040.5 Longitud del nombrea) Regla Los nombres de columna no deben exceder los 20 caracteres.

3.040.6 Utilizacin de abreviaturas en el nombrea) Regla En caso de que sea posible, se debern utilizar abreviaturas para los nombres de columnas. b) Desafo Definir un conjunto basto de abreviaciones y principalmente que sean de conocimiento pblico y concensuadas con el resto del equipo.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 19/113 Identificacin Pendiente

Estndar de Programacin PL/SQLUtilizar nombres y abreviaturas uniformes en todo el sistema. Es decir reutilizar las mismas convenciones de nomenclatura en todo el desarrollo.

3.040.7 Identificadores de internos de registro (claves primarias auto generadas)a) Regla Los Identificadores de registro interno se debern llamar: _ID. b) Motivacin Identificar fcilmente estas columnas dentro del conjunto de columnas de la tabla y dentro de consultas. c) Ventajas

Cuando estas columnas se deriven a otras tablas por la creacin de Foreign Key se podr identificar la tabla con la que se encuentra relacionado. d) Desventajas Cuando se trate de tablas con nombres conformado por varias palabras el nombre corto de la tabla puede no identificar fcilmente la tabla a la que pertenece la tabla o se deriva por FK.

3.040.8 Seleccin de Primary Keysa) Regla Las columnas de la primary key no deben tener semntica. Es preferible utilizar columnas que representen un identificador interno sin semntica. b) Motivacin Se evitan claves primarias con muchas columnas como tambin columnas de FKs derivadas con muchas columnas. Se evitan actualizaciones masivas en cascada de datos. (pensar en una lista de telfonos. Si la clave primaria de una tabla fuera el nmero de telfono, que hubiera pasado cuando se agrego el 4 al numero?). En muchos casos, la actualizacin de una columna parte de una clave primaria implica deshabilitar y habilitar foreign keys.

3.040.9 Foreign key columnsa) Regla Utilizar el siguiente formato para nombre de columnas foreign key. [alias de tabla padre]_[nombre de columna referenciada] En el caso de que surjan conflictos (por ejemplo, cuando existen ms de una foreign key a la misma tabla), se deber utilizar el siguiente formato: [semntica de la relacin]_[alias de tabla padre]_[nombre de columna referenciada]Cambio Pendiente Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 20/113 Identificacin Pendiente

Estndar de Programacin PL/SQLCuando una clave sea heredada con ms de un nivel, no deber anteponerse el alias de la tabla padre. b) Ejemplo Supongamos que existen tres tablas: t1, t2 y t3. La tabla t1 tiene una clave primaria compuesta por la columna id. La tabla t2 tiene una foreign key a t1 a travs de una columna que deber llamarse t1_id. Ahora, supongamos que t3 tiene una foreign key a la columna t1_id de la tabla t2. La columna deber llamarse, entonces, t1_id (no deber llamarse t2_t1_id).

3.040.10 Orden de columnas dentro de tablasa) Regla Las columnas debern tener el siguiente orden dentro de las tablas: 1. Columnas pertenecientes a la clave primaria. 2. Columnas pertenecientes a claves nicas. 3. Columnas obligatorias 4. Columnas opcionales 5. Esta regla tambin deber aplicarse a las vistas b) Motivacin De esta forma, las columnas opcionales quedan al final de cada fila sin ocupar lugar en la base de datos. Otra ventaja es que la estandarizacin del orden de las columnas hace que el esquema de datos sea ms fcil de entender y verificar. Cuando existan columnas que representan un valor y una columna de FK que referencia a una caracterstica del valor, se deben poner juntas dentro del conjunto de columnas sin importar la obligatoriedad de las mismas. c) Ejemplo Tabla VENTAS ID_VENTA FECHA_VENTA MONTO_VENTA ID_MONEDA(una columna de FK a la tabla monedas) Las columnas MONTO_VENTA y ID_MONEDA se ubican juntas dado que ID_MONEDA especifica una caracterstica del valor de la columna MONTO_VENTA.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 21/113 Identificacin Pendiente

Estndar de Programacin PL/SQL3.040.11 Tipos de datos de las columnasa) Regla No utilizar columnas tipo CHAR. Utilizar VARCHAR2. Definir tamao mximo de columnas NUMBER. b) Motivacin Las columnas tipo CHAR pueden ahorrar espacio de almacenamiento en la base de datos, pero ocasionan muchos errores de programacin dado que siempre son completados con espacios. Las columnas tipo NUMBER sin especificacin de longitud, ocuparn 38 bytes.

3.040.12 Tipo de Dato en el nombre de columnaa) Regla No utilizar prefijos que indiquen el tipo de dato de la columna como prefijo o sufijo (por ejemplo C_ CHAR, N_ NUMBER, etc).

3.050 Primary Keys3.050.1 Nombrea) Regla Utilizar la siguiente nomenclatura para las primary keys: [APP]_[alias de tabla]_PK

3.050.2 Orden de las columnasa) Regla Las columnas en la primary key deben tener el mismo orden que en la tabla. Ejemplo Para la tabla SRH_PERSONAS el nombre de la clave primaria sera: SRH_PERS_PK

3.060 Unique Keys3.060.1 Nombrea) Regla Utilizar la siguiente nomenclatura para las primary keys: [APP]_[alias de tabla]_UK[numero de unique key]

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 22/113 Identificacin Pendiente

Estndar de Programacin PL/SQLb) Ejemplo Para la tabla SRH_PERSONAS el nombre de una de las claves nicas sera: SRH_PERS_UK1

3.060.2 Orden de las columnasa) Regla Las columnas en la unique key deben tener el mismo orden que en la tabla. Esto no es siempre posible, dado que una tabla puede tener varias unique Keys. Siempre que sea posible, esta regla debe respetarse.

3.070 Foreign Keys3.070.1 Nombrea) Regla Utilizar la siguiente nomenclatura para las Foreign Keys: [APP]_[alias de tabla origen]_[alias de tabla referenciada]_[semntica de la relacin]_FK b) Motivacin De esta forma es fcil determinar el tipo de constraint, las tablas involucradas y el significado de la relacin. Adems, la seccin de semntica de la relacin evitan problemas de unicidad en los nombres de las constraints cuando una tabla referencia a otras mas de una vez. c) Ejemplo

Supongamos que la tabla SRH_EMPLEADOS tiene una FK a la tabla SRH_AREAS que representa la relacin un empleado pertenece a una y solo una rea de la empresa Nombre corto de la tabla SRH_EMPLEADOS : EMPL , nombre corto de la tabla SRH_AREAS: AREA El nombre de la Foreign Key podra ser: SRH_EMPL_AREA_PERTENECE_FK. Cuando la relacin es muy obvia se puede omitir la semntica de la relacin: SRH_EMPL_AREA_FK.

3.080 Check Constraints3.080.1 Validacin de reglasa) Regla Las check constraints no debern validar ms de una regla por vez.Cambio Pendiente Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 23/113 Identificacin Pendiente

Estndar de Programacin PL/SQLb) Motivacin El mantenimiento de las reglas de negocio es ms fcil de esta forma. Por ejemplo, cuando una regla de negocio se vuelve obsoleta, lo nico que hay que hacer es eliminar la constraint que la implementa.

3.080.2 Nombrea) Regla Utilizar la siguiente nomenclatura para las Check constraints: [APP]_[alias de tabla]_[nombre lgico]_CK b) Motivacin De esta forma es ms fcil distinguir de qu tipo de constraint se trata, la tabla a la que pertenece y el tipo de regla que implementa. c) Ejemplo

Supongamos que la tabla SRH_EMPLEADOS tiene una Check Constraint que verifica que los valores de la columna ESTADO est dentro del conjuto de valores: [A Activo, B Dado de Baja], entonces el nombre de la constraint podra ser: SRH_EMPL_ESTADO_CK.

3.090 Sequencias3.090.1 Nombrea) Regla Utilizar la siguiente nomenclatura para las Secuencias: [APP]_[alias de tabla]_SEQ[numero de secuencia] Donde el nmero de secuencia es un nmero correlativo comenzando desde 1 agregado al nombre completo de la secuencia que servir para evitar problemas de unicidad en el caso de que una tabla utilice ms de una secuencia. Cuando se trate de la secuencia que genera los valores para el identificador interno de la tabla el nombre de la secuencia el nombre a asignar el siguiente: [APP]_[alias de tabla]_[alias identificador interno]_SEQ b) Motivacin De esta forma es fcil distinguir para qu tabla es utilizada la sequencia en cuestin y se evitan problemas de unicidad de nombres. Para el caso de las secuencias de los identificadores internos se puede identificar fcilmente que secuencia corresponde al mismo. c)Cambio Pendiente

EjemploTtulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 24/113 Identificacin Pendiente

Estndar de Programacin PL/SQLSi la columna del identificador interno de la tabla SRH_EMPLEADOS es ID_EMPLEADO la secuencia que genera los valores para esta columna podra llamarse SRH_EMPL_ID_SEQ.

3.0100 Indices3.0100.1 Pautas de Indizacina) Regla A la hora de crear un ndice se deben tener en cuenta las pautas de indizacin: Crear ndices solo cuando fuese necesario. Crear un ndice para acelerar una consulta puede afectar a otras. Eliminar ndices innecesarios. Evaluar el plan de ejecucin a fin de corroborar la utilizacin de los ndices por el optimizador. Las claves de los ndices deben tener una alta selectividad. La selectividad de un ndice esta dada por la cantidad de distintas claves, sobre el total de tuplas que posee la tabla. Una buena selectividad es lograda cuando son pocas las claves que tienen un mismo valor. Considere indizar claves utilizadas frecuentemente en clusulas WHERE. Considere indizar columnas utilizadas frecuentemente en joins de tablas. No utilice ndices B*-tree con claves o expresiones con pocos valores distintos ya que estos tienen baja selectividad y no mejoran la performance. No indizar columnas que son frecuentemente modificadas. Update / Insert y deletes que modifican tablas indexadas, demoran mas que tablas no indizadas. No ndice claves que aparezcan en una clusula WHERE utilizando funciones. Una clusula WHERE que utilice funciones que no sean MIN o MAX, no tendrn disponible el ndice, excepto que el ndice, sea basado en funciones. b) Beneficios Bien utilizados mejoran enormemente el rendimiento en consultas frecuentes.

c)

Desafos

Se deben tener en cuenta los efectos de utilizar ndices en tablas cuando se realizan operaciones DML. Dichos efectos se listan a continuacin:

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 25/113 Identificacin Pendiente

Estndar de Programacin PL/SQLLuego de periodos de alta actividad de DMLs, se deben reorganizar los ndices B*tree. Estos ndices reconstruidos sobre datos existentes son mas eficientes que los mantenidos implcitamente por el Oracle Server. Los inserts sobre la tablas, genera la insercin de una entrada en el bloque correspondiente del ndice. Pudindose generar un (block split). Los deletes sobre tablas, genera la eliminacin de una entrada en el bloque correspondiente del ndice. Pudindose generar la liberacin del bloque. Los updates sobre tablas, genera la eliminacin de la vieja entrada y la insercin de una nueva entrada en el bloque correspondiente del ndice.

3.0100.2 Nombre de ndicesa) Regla Los ndices creados para las foreign keys debern tener el mismo nombre que la constraint con el postfijo _I Los dems ndices debern utilizar la siguiente nomenclatura: [APP]_[alias de tabla]_I[numero de secuencia] b) Ejemplo Supongamos que la NUMERO_DOCUMENTO_UNICO tabla SRH_PERSONAS posee la columna el nombre del ndice podria ser: SRH_PERS_I01.

Supongamos que la tabla SRH_EMPLEADOS posee la FK SRH_EMPL_AREA_PERTENECE_FK, entonces el ndice de soporte de la FK podria llamarse SRH_EMPL_AREA_PERTENECE_FK_I.

3.0100.3 Indices y valores Nulla) Regla Los valores NULL en ndices se consideran distintos excepto cuando todos los valores not-null en dos o ms filas de un ndice son idnticos, en ese caso las filas se consideran idnticas. Los ndices Unique evitan que las filas que contienen valores NULL sean tratadas como idnticas. Oracle no pone en un ndice las filas de la tabla en las cuales todas las columnas de la clave son NULL.

3.0100.4 Creacin de ndices para foreign keysa) Regla Crear un ndice para todas las foreign keys de las tablas salvo para los siquientes casos: El diseador determina que el ndice no mejorar la performance de las queries.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 26/113 Identificacin Pendiente

Estndar de Programacin PL/SQL El diseador determina que el ndice ocasionar un alto overhead. Existe otro indice que incluye las columnas de la foreign key. b) Motivacin El motor de base de datos, no crea automticamente ndices para claves forneas. Las columnas de una FK son utilizadas frecuentemente para Joinearlas con las tablas de referencia. La existencia de ndices sobre estas columnas, teniendo en cuenta las excepciones antes mencionadas, mejora la performance de las queries en las que se Joinean estas tablas.

3.0100.5 No crear ndices nicosa) Regla No debern crearse ndices nicos, para eso se debern utilizarse las unique keys. b) Motivacin El hecho de que se representen los casos de valores nicos con Unique Keys aporta semntica al significado de que un conjunto de columnas, esto se hace evidente cuando se visualiza un error de valores duplicados referenciando a una UK y no a un ndice.

3.0100.6 Orden de columnas de ndices para FKsa) Regla Para ndices creados para constraints, utilizar el mismo orden secuencial de las columnas de la constraint. b) Motivacin Esto previene la confusin y facilita la lectura de la semntica de las relaciones en las queries.

3.0100.7 Pautas para ndices compuestosa) Regla Coloque primero (leading part) las columnas de mayor selectividad. Coloque primero las columnas accedidas con mayor frecuencia. Si especificara la clave entera, coloque primero la columna mas restrictiva. Utilice la opcin COMPRESS cuando sea posible.

3.0100.8 ndices basados en funcionesa) Regla Condiciones para utilizar ndices basado en funciones:

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 27/113 Identificacin Pendiente

Estndar de Programacin PL/SQLLa funcin debe ser determinstica. Es decir, que dado y=f(x) para el mismo x, siempre devuelve el mismo y. Ejemplo funcin NO deterministica: f(x) = to_char(sysdate,ddmmyyyy)||x La sesin debe tener seteado el parmetro Query_rewrite_enabled=true. b) Motivacin Los ndices basados en funciones proporcionan un mecanismo eficiente para las consulta que contienen funciones en su clusula WHERE. Los ndices basados en funciones precomputa el valor de la funcin o de la expresin y lo almacena en el ndice. Se puede crear un ndice basado en funcin como un b-tree o un ndice Bitmap. c) Ejemplo:

CREATE INDEX FBI_UPPER_LASTNAME ON CUSTOMERS(upper(cust_last_name));

3.0100.9 ndices y Constraintsa) Regla Cuando se define una primary o unique key constraint sobre una tabla, el motor genera automticamente un ndice (o utiliza uno existente) para soportarlo. No se puede eliminar ndices que se utilizan para cumplir con alguna constraint. Para hacer esto, se debe dropear primero la contraint y luego el ndice. Los ndices responden por lo menos a dos propsitos: Para realizar consultas mas performantes Hacer cumplir claves nicas y primarias.

3.0100.10 ndices de clave invertidaa) Regla Crear un ndice de clave invertida, comparado a un ndice estndar, invierte los bytes de cada columna puesta en un ndice (excepto el rowid) mientras que guarda el orden de la columna. Tal arreglo puede ayudar a evitar la contencion en disco cuando las modificaciones al ndice se concentran en bloques de la ultima hoja. Invirtiendo la clave del ndice, las inserciones se distribuyen a travs de todas las hojas del ndice. Utilizar un ndice con clave invertida elimina la posibilidad de hacer un range scan sobre el mismo. Porque las claves lgicamente adyacentes no se almacenan de forma contigua. slo se pueden realizar consultas por clave o accesos full.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 28/113 Identificacin Pendiente

Estndar de Programacin PL/SQL3.0100.11 Pautas para ndices Bitmapa) Regla Usarlos en columnas con baja cardinalidad, es decir el numero de valores distintos es pequeo comparado con el nro de filas de la tabla. Ejemplo, Sexo, Estados, Tipos, etc Ocupan menos espacio y son mas eficientes que los ndices B*Tree cuando la columna es de baja cardinalidad. Los ndices bitmap no son convenientes para los usos de OLTP con una gran cantidad de transacciones concurrentes que modifican los datos. Estos ndices son performantes para DDS donde los usuarios consultan los datos con pocas actualizaciones diarias. Este tipo de ndices tienen tendencia a desbalancearse. Por lo tanto cuando se realizan grandes movimientos de datos es recomendable reconstruirlos. En procesos batch que implique movimiento de muchos datos es recomendable hacer lo siguiente: Deshabilitar Indices Bitmap Ejecutar procesos Batch Reconstruir indices Bitmap (rebuild Index) b) Motivacin Oracle almacena cada valor de clave con cada rowid almacenado. Cada bit en el BITMAP corresponde a un rowid posible. Si se fija el bit, entonces significa que la fila con el rowid correspondiente contiene la misma clave. Una funcin convierte la posicin del bit a un rowid real, as que el ndice Bitmap proporciona la misma funcionalidad que un ndice regular aunque es distinto internamente. c) EjemploFROM products WHERE supplier_id = 3;

SELECT *

Suplier Id = 3

0 0 1 0 1

Fila Retornada Fila Retornada

3.0100.12 ndices particionados.a) ReglaCambio Pendiente Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 29/113 Identificacin Pendiente

Estndar de Programacin PL/SQLLocal index En un local index, todas las claves en una particin particular del ndice se refieren exclusivamente a las filas almacenadas en una sola particin de la tabla. Este tipo de ndice tiene en algunas condiciones, mejores tiempos de respuesta y permite un mejor y mas rpido mantenimiento. Local prefixed Un local index es prefixed si las columnas de particionamiento de la tabla se corresponden con las primeras del ndice. Local nonprefixed Un local index es non-prefixed si las columnas de particionamiento de la tabla no se encuentran a la izquierda del ndice. Global prefixed index (Oracle no suporta global non-prefixed indexes) En un global index, las claves de una particin particular del ndice pueden referir a las filas almacenadas en ms de un particin o subpartition de la tabla.

3.0110 Triggers3.0110.1 Nombrea) Regla Los nombres de los triggers se conformarn segn la instancia en que se disparan, el evento que los disparan y el alcance de las sentencias: Instancia After: AFT Before: BEF Evento Insert: INS Update: UPD Delete: DEL Alcance Each Row: RW Statement: SMT

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 30/113 Identificacin Pendiente

Estndar de Programacin PL/SQLEntonces la conformacin del nombre sera: [APP]_[alias de tabla]_[instancia]_[evento]_[alcance]_TRG b) Motivacin Poder determinar a partir del nombre del trigger la tabla a la que pertenece, la instancia en que se dispara, el evento que lo dispara y el alcance de las operaciones dentro del trigger. c) Ejemplo

SRH_PERS_BEF_INS_RW_TRG: trigger de la tabla PERSONAS de la aplicacin SRH que se dispara antes de una operacin INSERT sobre la tabla por cada registro. SRH_EMPL_AFT_DEL_SMT_TRG: trigger de la tabla EMPLEADOS de la aplicacin SRH que se dispara despus de una operacin DELETE sobre la tabla por sentencia.

3.0110.2 Lgica simplea) Regla No cargar el trigger con lgica compleja. b) Motivacin No sumar un ovesrhead considerable a la operacin que lo dispara.

3.0120 Sinonimos3.0120.1 Un sinnimo publico por objetoa) Regla No crear ms de un sinnimo pblico por objeto b) Motivacin Evitar confusiones y seguimientos engorrosos de cdigo con indirecciones.

3.0120.2 Sinnimo con el mismo nombre que el objetoa) Regla Cuando el sinnimo cumple la funcin de eliminar las dependencias del nombre del usuario owner como prefijo en el referenciamiento del objeto se debe utilizar como sinnimo el mismo nombre que el objeto. b) Motivacin Favorecer la portabilidad de las aplicaciones y eliminar indirecciones innecesarias de nombres.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 31/113 Identificacin Pendiente

Estndar de Programacin PL/SQL3.0130 Excepciones3.0130.1 Utilizar excepcionesa) Regla Para emitir errores las rutinas deben utilizar excepciones en lugar de cdigos de xito/fracaso. b) Motivacin Las excepciones son una caracterstica que no todos los lenguajes tienen. No utilizarla hace que los programas sean ms difciles de codificar y mantener pues la lgica de negocios suele mezclarse con la del control de errores. c) Ejemplo Ejemplo de lo que no se debe hacerPROCEDURE test_procedure(x NUMBER, y NUMBER, errcode NUMBER) IS BEGIN ... IF ... THEN errorcode = 0; ELSIF ... THEN errorcode = 1; ELSIF ... THEN errorcode = N; END IF; END; BEGIN ... test_procedure(x, y, errcode); -IF errorcode = 0 THEN ... continuar ... ELSE ... END IF; END;

Ejemplo utilizando excepcionesPROCEDURE test_procedure(x NUMBER, y NUMBER, errcode NUMBER) IS BEGIN ... RAISE(exception1_cod); ... RAISE(exception2_cod); END; BEGIN ... test_procedure(x, y); ... continuar ... EXCEPTION WHEN xxx THEN ...

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 32/113 Identificacin Pendiente

Estndar de Programacin PL/SQLEND;

d) Beneficios El cdigo generado es ms mantenible, menos propenso a errores y menos costoso. e) Desafos

Esto significar tener una disciplina y una planificacin avanzada. Antes de comenzar a construir su aplicacin, crear un conjunto de packages que definan las reglas de negocios y frmulas para las distintas reas de funcionalidad.

3.0130.2 Utilizar el package err_msg de excepcionesa) Regla Todas las excepciones deben ser emitidas con un package construido para tal fin llamado err_mgr. No debe utilizarse RAISE_APPLICATION_ERROR. b) Motivacin Estandariza la emisin de excepciones y hace que los cdigos y mensajes de error sean estndares en el sistema, pues los mismos son obtenidos de una tabla. Adems, los cdigos de error representan una situacin puntual conocida y documentada para el sistema. c) Ejemplo

CREATE OR REPLACE PACKAGE err_mgr IS PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER); FUNCTION errcode RETURN PLS_INTEGER; END; / CREATE OR REPLACE PACKAGE BODY err_mgr IS v_last_errcode PLS_INTEGER; PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER) IS v_pls_exception_code NUMBER; v_err_msg VARCHAR2(2000); BEGIN -v_last_errcode := p_exc_cod; raise_application_error( v_pls_exception_code, v_err_msg, TRUE); END; FUNCTION errcode RETURN PLS_INTEGER IS BEGIN return v_last_errcode; END; END; / CREATE OR REPLACE PACKAGE exc_test3_pck IS exception1_cod CONSTANT PLS_INTEGER := 1001; e_test3 exception; pragma exception_init(e_test3, -20001); PROCEDURE proc1; PROCEDURE endproc1;

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 33/113 Identificacin Pendiente

Estndar de Programacin PL/SQLEND; / CREATE OR REPLACE PACKAGE BODY exc_test3_pck IS PROCEDURE proc1 IS BEGIN -- Logica.... -- ... -- Ocurri un caso de excepcin... err_mgr.raise_with_msg(exception1_cod); -- Logica ... -- ... END; PROCEDURE endproc1 IS v_errm VARCHAR2(1000); BEGIN -- Esto puede ser un job, por ejemplo, -- que recorre una lista y por cada uno ejecuta la lgica de proc1 -- FOR I IN CURSOR XXX LOOP proc1; -- END LOOP; EXCEPTION WHEN e_test3 THEN IF err_mgr.errcode = exception1_cod THEN -- Manejar la exception... en este ejemplo solo vuelvo a emitirla dbms_output.put_line('Handling ' || to_char(exception1_cod)); RAISE; --ELSIF errcode = exception2_cod -- ... HANDLER EXCEPTION2 --.. END IF; END; END; /

3.0130.3 Una excepcin debe representar un nico errora) Regla Cada excepcin debe identificar a un solo error. b) Motivacin Mayor claridad en el manejo de errores e identificacin de problemas. Por ejemplo, el mensaje de error Persona inexistente o tipo de documento invlido debera sustituirse por dos errores: Persona inexistente y Tipo de documento invlido.

3.0130.4 Manejar excepciones que puedan ser anticipadasa) Regla Ante la llamada a un procedimiento, la rutina llamadora debe manejar las posibles excepciones emitidas por el procedimiento llamado. Para esto, los procedimientos deben tener documentadas las excepciones que pueden emitir. b) Motivacin Evitar terminaciones no esperadas de programas. Correccin.

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 34/113 Identificacin Pendiente

Estndar de Programacin PL/SQL

3.0130.5 No hardcodear cdigos de errora) Regla No hardcodear cdigos de error. Se debe utilizar la tabla de errores de la aplicacin. Por cada excepcin declarada debe existir una constante que la identifique. El nombre de la constante debe ser de la siguiente forma: nombreExcepcion_cod. b) Motivacin Disear los programas de la manera que estos tengan un propsito claro y bien definido. c) Ejemplo

CREATE OR REPLACE PACKAGE err_mgr IS PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER); FUNCTION errcode RETURN PLS_INTEGER; END; / CREATE OR REPLACE PACKAGE BODY err_mgr IS v_last_errcode PLS_INTEGER; PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER) IS v_pls_exception_code NUMBER; v_err_msg VARCHAR2(2000); BEGIN --v_last_errcode := p_exc_cod; raise_application_error( v_pls_exception_code, v_err_msg, TRUE); END; FUNCTION errcode RETURN PLS_INTEGER IS BEGIN return v_last_errcode; END; END; / CREATE OR REPLACE PACKAGE exc_test3_pck IS exception1_cod CONSTANT PLS_INTEGER := 1001; e_test3 exception; pragma exception_init(e_test3, -20001); PROCEDURE proc1; PROCEDURE endproc1; END; / CREATE OR REPLACE PACKAGE BODY exc_test3_pck IS PROCEDURE proc1 IS BEGIN -- Logica.... -- ... -- Ocurrio un caso de excepcion... err_mgr.raise_with_msg(exception1_cod); -- Logica ... -- ...

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 35/113 Identificacin Pendiente

Estndar de Programacin PL/SQLEND; PROCEDURE endproc1 IS v_errm VARCHAR2(1000); BEGIN -- Esto puede ser un job, por ejemplo, -- que recorre una lista y por cada uno ejecuta la logica de proc1 -- FOR I IN CURSOR XXX LOOP proc1; -- END LOOP; EXCEPTION WHEN e_test3 THEN IF err_mgr.errcode = exception1_cod THEN -- Manejar la exception... en este ejemplo solo vuelvo a emitirla dbms_output.put_line('Handling ' || to_char(exception1_cod)); RAISE; --ELSIF errcode = exception2_cod -- ... HANDLER EXCEPTION2 --.. END IF; END; END; /

3.0130.6 Captura de excepcionesa) Regla Capturar excepciones por nombre. No utilizar WHEN OTHERS. La seccin de manejo de excepciones debe capturar la excepcin emitida por nombre y tener una clusula CASE para discriminar el cdigo de error de la excepcin emitida. b) Motivacin Capturar de esta forma los errores es una buena forma de emular que todas las excepciones sean nombradas. c) Ejemplo

CREATE OR REPLACE PACKAGE err_mgr IS PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER); FUNCTION errcode RETURN PLS_INTEGER; END; / CREATE OR REPLACE PACKAGE BODY err_mgr IS v_last_errcode PLS_INTEGER; PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER) IS v_pls_exception_code NUMBER; v_err_msg VARCHAR2(2000); BEGIN -v_last_errcode := p_exc_cod; raise_application_error( v_pls_exception_code, v_err_msg, TRUE); END; FUNCTION errcode RETURN PLS_INTEGER IS BEGIN

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 36/113 Identificacin Pendiente

Estndar de Programacin PL/SQLreturn v_last_errcode; END; END; / CREATE OR REPLACE PACKAGE exc_test3_pck IS exception1_cod CONSTANT PLS_INTEGER := 1001; e_test3 exception; pragma exception_init(e_test3, -20001); PROCEDURE proc1; PROCEDURE endproc1; END; / CREATE OR REPLACE PACKAGE BODY exc_test3_pck IS PROCEDURE proc1 IS BEGIN -- Logica.... -- ... -- Ocurrio un caso de excepcion... err_mgr.raise_with_msg(exception1_cod); -- Logica ... -- ... END; PROCEDURE endproc1 IS v_errm VARCHAR2(1000); BEGIN -- Esto puede ser un job, por ejemplo, -- que recorre una lista y por cada uno ejecuta la logica de proc1 -- FOR I IN CURSOR XXX LOOP proc1; -- END LOOP; EXCEPTION WHEN e_test3 THEN IF err_mgr.errcode = exception1_cod THEN -- Manejar la exception... en este ejemplo solo vuelvo a emitirla dbms_output.put_line('Handling ' || to_char(exception1_cod)); RAISE; --ELSIF errcode = exception2_cod -- ... HANDLER EXCEPTION2 --.. END IF; END; END; /

3.0130.7 Emular excepciones nombradas por constantes en packagesa) Regla Las excepciones deben declararse como constantes en el PACKAGE que las emite o bien en otro package que contenga todas las excepciones del package principal. Cada constante que represente un error deber tener a su vez una excepcin (excepcin PLSQL propiamente dicha) asociada. b) Motivacin Dado que PL/SQL slo reserva 1000 cdigos de error para usuarios (desde el 20000 al -21000) se determina que las excepciones se representarn con constantes pues

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 37/113 Identificacin Pendiente

Estndar de Programacin PL/SQL1000 cdigos son pocos. Por otro lado, asociar excepciones PLSQL a cada cdigo de error permite que la captura se realice por nombre en lugar de utilizar WHEN OTHERS. Esta forma de manejar excepciones emula la forma en que el lenguaje lo hace naturalmente. c) Ejemplo

CREATE OR REPLACE PACKAGE err_mgr IS PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER); FUNCTION errcode RETURN PLS_INTEGER; END; / CREATE OR REPLACE PACKAGE BODY err_mgr IS v_last_errcode PLS_INTEGER; PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER) IS v_pls_exception_code NUMBER; v_err_msg VARCHAR2(2000); BEGIN /* SELECT INTO v_pls_exception_code, v_err_msg FROM errtab WHERE exc_cod = p_exc_cod; */ -v_last_errcode := p_exc_cod; raise_application_error( v_pls_exception_code, v_err_msg, TRUE); END; FUNCTION errcode RETURN PLS_INTEGER IS BEGIN return v_last_errcode; END; END; / CREATE OR REPLACE PACKAGE exc_test3_pck IS exception1_cod CONSTANT PLS_INTEGER := 1001; e_test3 exception; pragma exception_init(e_test3, -20001); PROCEDURE proc1; PROCEDURE endproc1; END; / CREATE OR REPLACE PACKAGE BODY exc_test3_pck IS PROCEDURE proc1 IS BEGIN -- Logica.... -- ... -- Ocurrio un caso de excepcion... err_mgr.raise_with_msg(exception1_cod); -- Logica ... -- ... END; PROCEDURE endproc1 IS v_errm VARCHAR2(1000);

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 38/113 Identificacin Pendiente

Estndar de Programacin PL/SQLBEGIN -- Esto puede ser un job, por ejemplo, -- que recorre una lista y por cada uno ejecuta la logica de proc1 -- FOR I IN CURSOR XXX LOOP proc1; -- END LOOP; EXCEPTION WHEN e_test3 THEN IF err_mgr.errcode = exception1_cod THEN -- Manejar la exception... en este ejemplo solo vuelvo a emitirla dbms_output.put_line('Handling ' || to_char(exception1_cod)); RAISE; --ELSIF errcode = exception2_cod -- ... HANDLER EXCEPTION2 --.. END IF; END; END; /

3.0130.8 Las rutinas deben documentar las excepcionesa) Regla Para cada procedimiento o funcin dentro de un package se deben agregar como comentarios en la especificacin del package cuales son las excepciones que emite. b) EjemploPACKAGE exc_test3_pck IS e_test3 exception; pragma exception_init(e_test3, -20001); exception1_cod CONSTANT PLS_INTEGER := 1001; exception2_cod CONSTANT PLS_INTEGER := 1002; -- Excepciones que emite: -- exception1_cod (e_test3): Se emite cuando.... -- exception2_cod (e_test3): Se emite cuando.... PROCEDURE proc1; END;

3.0130.9 Utilizar PRAGMA_EXCEPTION INITa) Regla Asignar cada excepcin definida por el usuario a un cdigo de error Oracle mediante PRAGMA EXCEPTION_INIT. El cdigo deber ser nico en el sistema. b) EjemploCREATE OR REPLACE PACKAGE err_mgr IS PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER); FUNCTION errcode RETURN PLS_INTEGER; END; / CREATE OR REPLACE PACKAGE BODY err_mgr IS v_last_errcode PLS_INTEGER; PROCEDURE raise_with_msg(p_exc_cod PLS_INTEGER) IS v_pls_exception_code NUMBER; v_err_msg VARCHAR2(2000); BEGIN /*

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 39/113 Identificacin Pendiente

Estndar de Programacin PL/SQLSELECT INTO v_pls_exception_code, v_err_msg FROM errtab WHERE exc_cod = p_exc_cod ; */ -v_last_errcode := p_exc_cod; raise_application_error( v_pls_exception_code, v_err_msg, TRUE); END; FUNCTION errcode RETURN PLS_INTEGER IS BEGIN return v_last_errcode; END; END; / CREATE OR REPLACE PACKAGE exc_test3_pck IS exception1_cod CONSTANT PLS_INTEGER := 1001; e_test3 exception; pragma exception_init(e_test3, -20001); PROCEDURE proc1; PROCEDURE endproc1; END; / CREATE OR REPLACE PACKAGE BODY exc_test3_pck IS PROCEDURE proc1 IS BEGIN -- Logica.... -- ... -- Ocurrio un caso de excepcion... err_mgr.raise_with_msg(exception1_cod); -- Logica ... -- ... END; PROCEDURE endproc1 IS v_errm VARCHAR2(1000); BEGIN -- Esto puede ser un job, por ejemplo, -- que recorre una lista y por cada uno ejecuta la logica de proc1 -- FOR I IN CURSOR XXX LOOP proc1; -- END LOOP; EXCEPTION WHEN e_test3 THEN IF err_mgr.errcode = exception1_cod THEN -- Manejar la exception... en este ejemplo solo vuelvo a emitirla dbms_output.put_line('Handling ' || to_char(exception1_cod)); RAISE; --ELSIF errcode = exception2_cod -- ... HANDLER EXCEPTION2 --.. END IF; END; END;

Cambio Pendiente

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 40/113 Identificacin Pendiente

Estndar de Programacin PL/SQL/

4.000 Estilo de Programacin4.010 Generalidades4.010.1 Mayscula y minsculaa) Regla Los identificadores deben estar escritos en minscula, solamente se escriben en mayscula las palabras reservadas de codificacin PL/SQL. Esto incluye tambin nombres de stored procedures y objetos de base de datos como tablas, vistas, secuencias, etc. b) EjemploFUNCTION retrieve_employee_name_fn( p_employee_code IN srh_employees.employee_code%TYPE ) IS v_employee_name srh_employees.employee_name%TYPE; BEGIN SELECT emp.employee_name INTO v_employee_name FROM srh_employees emp WHERE emp.employee_code = p_employee_code; RETURN v_employee_name; END retrieve_employee_name_fn;

c)

Listado de Palabras Reservadas

A continuacin se enlistan algunas de las palabras reservadas de codificacin PL/SQL. Las palabras seguidas de asterisco (*) corresponden tambin a palabras reservadas de ANSI SQL.

ACCESS ANY* AUDIT BINARY_INTEG ER CASE CLUSTER* COMMIT CURRENT* DECIMAL* DISTINCT*Cambio Pendiente

ADD* ARRAY AUTHID BODY CHAR* COALESCE COMPRESS* CURRVAL DECLARE DO

ALL* AS* AVG BOOLEAN CHAR_BASE COLLECT CONNECT* CURSOR DEFAULT* DROP*

ALTER* ASC* BEGIN BULK CHECK* COLUMN CONSTANT DATE* DELETE* ELSE*

AND* AT BETWEEN* BY* CLOSE COMMENT* CREATE* DAY DESC* ELSIF

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 41/113 Identificacin Pendiente

Estndar de Programacin PL/SQLEND EXIT FILE FUNCTION HEAP IN* INSERT* INTO* LIKE* MAX MLSLABEL* NATURAL NOCOMPRESS NULLIF OFFLINE OPERATOR OTHERS PLS_INTEGER PRIVATE RANGE RELEASE REVOKE* ROWTYPE SESSION* SPACE STDDEV SYSDATE* TIMEZONE_REG ION TRIGGER* UNIQUE* VALUES*Cambio Pendiente

EXCEPTION EXTENDS FLOAT* GOTO HOUR INCREMENT INTEGER* IS* LIMITED MAXEXTENTS MOD NATURALN NOCOPY NUMBER* ON* OPTION* OUT POSITIVE PRIVILEGES* RAW* RENAME ROW* SAVEPOINT SET* SQL SUBTYPE TABLE* TIMEZONE_A BBR TRUE UPDATE* VARCHAR*

EXCLUSIVE* EXTRACT FOR* GRANT* IDENTIFIED INDEX* INTERFACE ISOLATION LOCK* MIN MODE* NEW NOT* NUMBER_BASE ONLINE OR* PACKAGE POSITIVEN PROCEDURE REAL RETURN ROWID* SECOND SHARE* SQLCODE SUCCESSFUL* THEN* TIMEZONE_MIN UTE TYPE USE VARCHAR2*

EXECUTE FALSE FORALL GROUP* IF INDICATOR INTERSECT* JAVA LONG* MINUS* MODIFY NEXTVAL NOWAIT* OCIROWID OPAQUE ORDER* PARTITION PRAGMA PUBLIC* RECORD RESOURCE ROWNUM* SELECT SIZE* SQLERRM SUM TIME TIMEZONE_H OUR UID* USER* VARIANCE

EXISTS* FETCH FROM* HAVING* IMMEDIATE* INITIAL INTERVAL LEVEL* LOOP MINUTE MONTH NOAUDIT NULL* OF* OPEN ORGANIZATI ON PCTFREE PRIOR* RAISE REF REVERSE ROWS* SEPARATE SMALLINT* START* SYNONYM* TIMESTAMP TO* UNION* VALIDATE* VIEW*

Ttulo: Estndar de Programacin PL/SQL Subttulo Escrito por: Apobado por: Aprobacin Pgina 42/113 Identificacin Pendiente

Estndar de Programacin PL/SQLWHEN WORK WHENEVER* WRITE WHERE* YEAR WHILE ZONE WITH*

4.010.2 Empaquetado de Procedimientos y Funcionesa) Regla Salvo en caso de procedimientos y/o funciones con usos muy