Está en la página 1de 85

Manual de Usuario para los

Estándares y Buenas Prácticas


de Desarrollo

Fernando de los Ríos Jorge Cachay Arana


Gerente de Sistemas
Jefe de Desarrollo

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 2 de 85

PROPIETARIO

Gerencia de Sistemas

PROPÓSITO

Establecer el marco común de definiciones de desarrollo de aplicaciones para estandarizar la estructura


de los proyectos y el estilo de codificación de forma tal que sean entendibles para todo el equipo de
desarrollo y los sistemas sean fácilmente darles mantenimiento.

APLICACIÓN

Área de Desarrollo de la Gerencia de Sistema.

FUNCIONES AFECTADAS

Todas las funciones y área de Desarrollo de Sistemas de Financiera Efectiva.

PUBLICACIONES RELACIONADAS

Metodología para el Desarrollo e Implementación de Sistemas y Para la Gestión de Proyectos

IMPORTANTE

El presente documento será de uso interno, pero ante la necesidad que un tercero deba conocerla,
quedará a criterio del Gerente General de la empresa la conveniencia de su entrega.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 3 de 85

HISTORIA DE REVISIONES:

VERSI
VIGENCIA AUTOR JUSTIFICATIVA
ÓN
Jorge Cachay Arana – Jefe de Desarrollo
Carlos Quiroz – Jefe de Proyecto
Guillermo Barboza- Jefe de Proyecto

01 15/08/2011 Alfredo Carmona- Jefe de Proyecto Versión Inicial


Luis Merino- Encargado de Control de Calidad
Fernando Quiroz- Administrador de la Base de
Datos.
SE AGREGARON LOS ÍTEMS
10, MANEJO DE ERRORES
Jorge Cachay Arana – Jefe de Desarrollo
Analistas de Desarrollo: 12.10 USO DEL COMANDO ON EXCEPTION
12.11 USO DEL COMANDO SET ISOLATION
 Luis Mori TO DIRTY READ
12.12 USO DEL COMANDO SET LOCK MODE
 Pedro Cholan
TO WAIT
02 04/06/2018
 Cesar Peña 12.13 CREACION DE TABLAS TEMPORALES
12.14 MENSAJES DE RESPUETSA DE WEB
 Jose Chavez SERVICES
 Victor Camoretti 12.15 RANGO DE FECHAS EN EJECUCION DE
REPORTES
12.16 COMANDO PDQPRIORITY
12.17 REPORTE o PROCESO MASIVO A
EJECUTARSE EN EL SECUNDARIO
Jorge Cachay Arana – Jefe de Desarrollo
Analistas de Desarrollo: SE MODIFICARON LOS PUNTOS
 Luis Mori 3. NO USO DE SP ANIDADOS
12.3. NO USO DEL ROWID Y ROWNUMBER
03 24/08/2018  Pedro Cholan 12.3 USO DE PREPARE DE SER NECESARIO,
 Cesar Peña EN BUCLES ES OBLIGATORIO
12.5 MODIFICACION DE PROGRAMAS
 Jose Chavez BACHEROS.
 Victor Camoretti
Jorge Cachay Arana – Jefe de Desarrollo
Analistas de Desarrollo:
 Luis Mori SE MODIFICO EL PUNTO
04 10/09/2018  Pedro Cholan
12.18. Carga con DBLOAD
 Cesar Peña
 Jose Chavez
 Victor Camoretti

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 4 de 85

CONTENIDO

1. OBJETIVO

2. ORGANIZACIÓN DE DIRECTORIOS DE TRABAJO Y ARCHIVOS

3. ESTRUCTURAS DE PROGRAMAS Y HERRAMIENTAS ESTANDARES PARA

FABRICA 4GL

4. DEFINICIÓN DE TABLAS, VISTAS, QUERYS, PROCEDIMIENTOS

ALMACENADOS Y FUNCIONES

5. MODULOS

6. DOCUMENTACIÓN DE MODIFICACIONES

7. FORMATO DE FORMULARIOS

8. FORMATO DE REPORTES

9. ESTÁNDAR DE TECLAS DE USO FRECUENTE

10. MANEJO DE ERRORES

11. SOBRE DDLS (Lenguaje de Definición de Datos)

12. MEJORES PRACTICAS DE PROGRAMACION 4GL INFORMIX

13. RECOMENDACIONES

14. CONSIDERACIONES ADICIONALES

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 5 de 85

1. OBJETIVO:
Establecer el marco común de definiciones de desarrollo de aplicaciones para estandarizar la
estructura de los proyectos y el estilo de codificación de forma tal que sean entendibles para todo el
equipo de desarrollo y los sistemas sean fácilmente darles mantenimiento.

2. ORGANIZACIÓN DE DIRECTORIOS DE TRABAJO Y ARCHIVOS:

2,1 Nombres de Carpetas:

Carpeta Nomenclatura Ejemplo Jerarquía


Proyecto Iniciales o nombre del Proyecto sfi sfi (Raíz)
Módulos Prefijo del módulo (mm) ad \sfi\ad\trunk

2.2 Nombres de Archivos para aplicaciones cliente (Cli):

Tipos de Archivos Nomenclatura Ejemplo


ad001.4gl
Programas mm###.4gl
ad002.4gl
ad001a.per
Formularios mm###X.per
ad001b.per

Programas C wmm###.c wgb001.c


Ejemplo:
mm = nombre del módulo.
ad = módulo administrador
pc = préstamos
###: es el correlativo en números.
X: es el correlativo en letras.
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 6 de 85

w: es el prefijo que se utilizara para los aplicativos web services

3. ESTRUCTURAS DE PROGRAMAS:
 Mantener el estándar de programación según aplicativos existentes (reportes, programas,
librerías, etc):
a. Mantener la estructura de 4gl´s ya desarrollados. El orden es el siguiente:
o Definición de variables globales.
o MAIN y END MAIN que invocan a funciones principales.
o Proceso central del aplicativo (comentar en la parte inferior de cada “función” el
objetivo del mismo).
o Rutinas generales
b. La estructura de los inputs en los reportes debe mantener las opciones: ver en pantalla,
generar e imprimir y volver a imprimir.
 El área de producción actualizará el diccionario de datos cuando se presente modificaciones en
estructuras de tablas.
 EL área de producción comentará los cambios escribiendo el nombre del desarrollador y la fecha
del cambio, en el servidor de fuentes.
 El área de producción actualizará el Shell comp.sh (instrucciones de compilación).

3.1 Definición de Funciones Principales:

Funciones Definición Ejemplo


f0100_proceso_<PRG> Inicio de Proceso f0100_proceso_ad000()
p0000_preparar_<PRG> Preparaciones en general p000_prepara_querys_ad000()
f1000_insertar_<PRG> Altas de Registros f1000_insertar_ad000()
f2000_modificar_<PRG> Modificaciones f2000_modificar_ad000()
f3000_Eliminar_<PRG> Eliminar f3000_eliminar_ad000()
f4000_buscar_<PRG> Búsqueda Formulario f4000_Buscar_ad000()
f5000_Buscar_Cliente_<PRG> Búsquedas Especificas f5000_busar_reg_<PRG>
p6000_Limpiar_<PRG> Inicialización de Variables f6000_limpiar_ad000()
f7000_imprimir_<PRG> Impresión en general f7000_imprimir_cj374()
p7000_crear_temporal_<PRG> Creación tablas temporales P7000_crea_temporales_cj374()
f8000_comprobantes_<PRG> Comprobantes f8000_comporbante_ad000()
f9000_enviar_correo_<PRG> Envío de correo f9000_enviar_correo_lc363()

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 7 de 85

Estas son las funciones principales con numeración predefinida. Este estándar deberá ser
consultado antes de desarrollar alguna función dentro del aplicativo o librería.

En informix 4gl las funciones y procedimientos utilizan la palabra clave FUNCTION por lo tanto la
nomenclatura de los nombres de los procedimientos y funciones deben realizarse de la siguiente
manera:

 Todo nombre de función debe empezar con la letra ´f´ seguido de lo ya indicado en el cuadro
anterior.
 Todo nombre de procedimiento debe empezar con la letra ´p´ seguido de lo ya indicado en el
cuadro anterior.
 Antes de crear una función nueva, debe consultarse antes en el inventario de funciones para
saber si ya existe alguna que haga la tarea deseada y volverla a reutilizar.

3.2 Definición de Variables:


 Variables de alcance globales

g_<NOMBRE> #comentario de la variable

Ejemplo: g_usuario #usuario del sistema

g_total #monto total

El prefijo “g_” lo identifica como variable GLOBAL

Para definir las constantes a nivel de la aplicación se deberá de usar la siguiente nomenclatura
“g_const_”<nombre>. Ejemplo:

Para las variables globales como por ejemplo g_user , g_prog , g_marc seguirán con el mismo
estándar el cual es la letra “g_” + <nombre>

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 8 de 85

 Variables de alcance a tablas

Global: t<n> Ejemplo: t0 RECORD LIKE adusr.*

El prefijo “t” lo identifica como una tabla declarada antes del comando MAIN en el
aplicativo.

Locales: l<n> Ejemplo l0 RECORD LIKE adusr.*

El prefijo “l” lo identifica como una tabla declarada dentro de una función específica.

 Variables locales de alcance a funciones

l_<nombre> Ejemplo: l_temporal

l_suma

Igualmente, el prefijo “l” identifica a la variable como local (declarada dentro de una función
específica).

(*) Las variables definidas deben ir acompañados con una breve descripción comentada.
(**) Todas las variables definidas en los procedimientos almacenados deben inicializarse, para
evitar que estas no sean reconocidas así hayan sido declaradas.

 Correcto uso de Variables tipo Char

 El correcto uso de variables tipo CHAR implica seguir lo indicado en la siguiente


matriz:
Tipos de variables Char:

Size (in bytes) Default Reserved Collation Length

VARCHAR(m, r) 1 to 255 0 for r 0 to 255 bytes Code set Variable

LVARCHAR(m) 1 to 32,739 2048 bytes None Code set Variable

Table 1. Attributes of built-in character data types

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 9 de 85

3.3 Herramientas estándares para fábrica 4gl


Todo analista programador tanto de la fábrica interna como externa, deberá trabajar sólo con las
siguientes herramientas:

 Winscp
 Ultraedit
 Winsql
 Putty
 tortoiseSVN
 emulator Vision

Así mismo, para la detección de Bugs o errores, localización de código duro, etc.. deberán utilizar
el Debugger (depurador) de informix 4gl, para lo cual cuentan con una cartilla de instrucción
base.
En el documento de pruebas del requerimiento desarrollado, deberá mostrarse la
pantalla del uso del DEBUG (imagen simple).

3.4. Comando SET EXPLAIN


o Programas que se ejecutan desde el menú de aplicaciones:

Indicar el SET EXPLAIN ON en la función limpia variables (ver ejemplo)

o Programas Batcheros

Indicar el SET EXPLAIN ON al inicio del proceso (ver ejemplo).

En la tabla eefpar inscribir el aplicativo con los siguientes parámetros:

 eefparpfij=270
 eefpartxt1='nombre de aplicativo'

El código a agregar en 4gl debe ser el siguiente:

Ejemplo:

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 10 de 85

En este ejemplo se está agregando el SET EXPLAIN para el aplicativo vt623sfi

3.5 Límite de líneas de código.


Una función o un procedimiento no deben tener más de 200 líneas (Steven C.
McConnell en CODE Complete) y un módulo de 4GL no debe tener más de 1000 líneas.

3.6 Log de Trazabilidad en tablas.


Toda aplicación de tipo batch deberá insertar log de trazabilidad de uso. Como mínimo
deberá existir el log de inicio del programa.

Ejemplo:

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 11 de 85

Nota: Este tipo de trazabilidad no es recomendada en aplicativos interactivos como


mantenedores o reporteadores ya que si el aplicativo es para varios usuarios la tabla en
donde se graba el log crecerá demasiado rápido. Para estos casos es mejor usar el
modo de trazabilidad del anexo 10

4. DEFINICIÓN DE TABLAS, VISTAS, PROCEDIMIENTOS ALMACENADOS Y


FUNCIONES:

4.1 Sub querys dentro de select


No utilizar sub queries en el select, utilizar tablas temporales. Se adjunta el costo del query y es
demasiado pesado.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 12 de 85

Por ejm, el siguiente query NO es buena práctica, debido a que genera altos costos y por ende
consumo de excesivos recursos en el IFX:

select adhususrn,
(SELECT adusrnomb FROM adusr WHERE adusrusrn = adhususrn),
(SELECT adprfperf FROM adprf WHERE adprfusrn = adhususrn),
(SELECT adusrnomb FROM adusr WHERE adusrusrn
IN (SELECT adprfperf FROM adprf WHERE adprfusrn =
adhususrn)),
(SELECT adusrfpro FROM adusr WHERE adusrusrn=adhususrn ),
(SELECT eaduiufech FROM eaduiu WHERE eaduiuusrn=adhususrn),
eadcusprog
from adhus,eadcus
where adhusmrcb = 9
and adhusfpro between "01/01/2017" and "31/12/2017"
and adhususrn=eadcususrn
and eadcusfech between "2017-01-01" and "2017-12-31"

4.2 Definición de Tablas:


La secuencia de comandos para la creación de una nueva tabla o mantenimiento de una
existente, deberán ser aprobados por el DBA vía correo o vía la WEB de Sistemas. Esto incluye
los comandos de índices, claves únicas, dbspaces, etc. La coordinación debe realizarse desde el
inicio del desarrollo con el fin de evitar devoluciones por parte del DBA.

Para poder diferenciar las tablas propias del SFI (tablas de origen del Sistema) de las tablas que
el área de desarrollo de EFECTIVA genere, éstas deberán empezar con “e”.

Nombres de Tabla: e<mmttt>

e_ = identificador de tabla creada por el área de sistemas de Efectiva

mm= Identificación del Módulo

ad = módulo administrador

gb = módulo agenda

ttt= Nombre significativo de la tabla

Nombres de Campos: mmttt<cccc>

cccc = Nombre significativo del campo

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 13 de 85

Nombre de Índices: mmttt<_n>

_n = Número correlativo de índice.

En el script de creación de tablas se debe de indicar lo sgte:

revoke all on <table> from "public";

Toda nueva tabla a crear, deberá tener clave primaria (primary key)

Para la creación de la primary key en una tabla, la idea es que el unique index que se
crea por defaul se debe hacer explícito para enviar a un dbspace de índice y los datos a
otro dbspace, ejemplo:

create table <nombre_tabla>

num_id integer not null ,

fec_creacion date not null ,

arc_datos byte,

cnt_tamanho integer not null ,

des_nombre varchar(250,1) not null ,

num_idasoc integer not null ,

ind_sisorigen char(2)

)in <dbspace_data> extent size <tamaño_extent> next size <tamaño_extent>


lock mode row;

create unique index <nombre_indice> on <nombre_tabla> (num_id) in


<dbspace_indice>;

alter table <nombre_tabla> add constraint primary key (num_id);

El dato del <dbspace_data>, <dbspace_indice> y <tamaño_extent> serán


proporcionados por el DBA.

4.2 Definición de Vistas:


Nombre de la vista:

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 14 de 85

v_<sistema>_<modulo>_<nombre de la vista>

Ejemplo: v_sai_in_ListarAlmacenes()

Uso de un programa específico:

v_<sistema>_<número de programa>_<nombre de la vista>

Ejemplo: v_sai_in2012_ListarAlmacenes

4.3 Definición de Procedimientos Almacenados:


Nombre de procedimiento almacenado:

pa_<sistema>_<modulo>_<nombre del procedure>

Ejemplo: pa_sai_in_ListarAlmacenes()

Uso de un programa específico:

pa_<sistema>_<número de programa>_<nombre del procedure>

Ejemplo: pa_sai_in2012_ListarAlmacenes

4.4 TRES CAPAS, STORES PROCEDURES

 Los SP reemplazarán a los querys que se ejecutan desde las aplicaciones o librerías.
 Los querys pasarán a los SP con los parámetros necesarios.
 Cada SP debe existir en cada base de datos y solo se debe usar la instancia para llamar al SP
para que la tarea se haga en su respectiva base.:
Execute procedure efe@efectiva_m1:<nombre_sp>
Todo los llamados de SP deben realizarse a través de un prepare.

 En las funciones donde se usa el comando foreach y ejecutan querys con llamado a BD, deben
pasar todo el foreach a SP.

4.5 Definiciones para las Funciones de Base de Datos:


Una función o un procedimiento no deben tener más de 200 líneas (Steven C. McConnell en
CODE Complete),

Nombre de funciones:

fdu_<sistema>_<modulo>_<nombre de la función>
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 15 de 85

Ejemplo: fdu_sai_in_ListarAlmacenes()

Uso de un programa específico:

fdu_<sistema>_<número de programa>_<nombre de la función>

Ejemplo: fdu_sai_in2012_ListarAlmacenes

(*) El procedimiento, vista o función deberá contener un log de cambios como se muestra en el
siguiente ejemplo.

(**) Todas las variables definidas en los procedimientos almacenados deben inicializarse, para
evitar que estas no sean reconocidas así hayan sido declaradas.

4.6 Ejemplo de Creación de Procedure:


Crear variables locales con el prefijo “l_” y el mismo nombre
de la columna de tabla ejm: “l_inalmcalm”.

CREATE PROCEDURE pa_sai_in_ListarAlmacenes()


--=============================================
--Autor:
--Fecha de creación:
--Modulo:
--Programa:
--Sistema:
--Descripción:
--Log Modificaciones
--=============================================
RETURNING smallint AS inalmcalcm, char(40) AS inalmdesc, SMALLINT AS inalmplaz,
CHAR(5) AS inalmabre, CHAR(1) AS inalmdeta;
DEFINE l_inalmcalm smallint;
DEFINE l_inalmdesc char(40);
DEFINE l_inalmplaz SMALLINT;
DEFINE l_inalmabre CHAR(5);
DEFINE l_inalmdeta CHAR(1);
FOREACH
SELECT inalmcalm,inalmdesc,inalmplaz,inalmabre,inalmdeta
INTO l_inalmcalm,l_inalmdesc,l_inalmplaz,l_inalmabre,l_inalmdeta
FROM INALM
ORDER BY 1
RETURN l_inalmcalm,l_inalmdesc,l_inalmplaz,l_inalmabre,l_inalmdeta
WITH resume;
END FOREACH;

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 16 de 85

END PROCEDURE;

4.7 Especificación de conceptos generales de una tabla dentro de un pase


Al realizar un pase con un Nuevo concepto o prefijo se debera indicar donde obtener las
descripciones de los mismos, ejemplo:

4.8 Uso de instancias en aplicativos que se ejecutan en el servidor secundario, pero


que requieren invocar al servidor primario.
Reportes que se ejecutan del secundario y leen al primario:

 Los querys deben ser optimizados, si se usan sub-querys o querys anidados estos
deben ser separados y trabajados en tablas temporales.
 En SFI
o Ya no se usará el SP ‘pa_gb_consulta_instancia’ para traer la instancia, solo se
usara el nombre de la base de datos correspondiente, ejemplo:
Antes:
SELECT EGBCONCORR
FROM efe@efectiva_m1:EGBCON
WHERE EGBCONCORR > 0
AND EGBCONPFIJ = 1
AND EGBCONABRE = '0'

Después:
SELECT EGBCONCORR
FROM efe:EGBCON
WHERE EGBCONCORR > 0
AND EGBCONPFIJ = 1
AND EGBCONABRE = '0'
 En SAI
o Si es una tabla centralizada se procederá como el mismo caso del SFI
o Caso Contrario, se procederá de la siguiente manera:
 Existe un SP llamado pa_gb_consulta_instancia en donde se le envia el
parámetro de código de instancia y el servidor (1-primario / 2-secundario),
el SP devuelve la instancia.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 17 de 85

 Este SP deberá ser llamado desde un nuevo SP. Este nuevo SP debe
tener un parámetro que será el comando que lo requiere:
1 = SELECT
2 = INSERT
3 = UPDATE
4 = DELETE
 Si el comando es ‘SELECT’ deberá llamar al SP
pa_gb_consulta_instancia con el parámetro de servidor ‘2’. Caso
contrario usar parámetro de servidor ‘1’.
 Este nuevo SP será el que se llamará desde la aplicación con el
parámetro que requiera.

4.9 Creación de Índices.


Al crear un índice que contenga más de un campo, este deberá ser configurado en orden
decreciente según la granularidad.

Ejemplo:

o En el ejemplo
 El nrodoc corresponde al # de documento de identidad. Este dato es el
que menos se repite (o tal vez irrepetible)
 El tipdoc corresponde al tipo de documento. Este dato si es repetitivo,
ejm “1= DNI”; “7 = RUC”,…

Por lo tanto el index correcto es nrodoc, tipdoc, ya que esto hará más
eficiente la búsqueda

5. MÓDULOS:
ID Módulo SFI
Ad Administrador – Seguridad
Gb General – Clientes
Cn Contabilidad
Ip Impuestos
Cj Caja

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 18 de 85

Ca Cajas de Ahorro
Lc Línea de Crédito
Pc Préstamos
Pv Calificación de riesgos y previsiones
Cr Central de Riesgos
cc Cuentas corrientes
ef Aplicativos desarrollados por Sistemas Efectiva
ddl Lenguaje definición de datos (procedimientos almacenados, funciones)
soap Protocolo de accesos a servicios

ID Módulo SAI

ad Administrador – Seguridad
gb General – Clientes
cn Contabilidad
ip Impuestos
cj Caja
vt Ventas
in Inventarios
cc Cuentas Corrientes
xc Cuentas x cobrar
co Compras
ts Tesorería
pc Prestamos de consumo
ef Aplicativos desarrollados por Sistemas Efectiva
Cp Cuentas x pagar
ddl Lenguaje definición de datos (procedimientos almacenados, funciones)
soap Protocolo de accesos a servicios

6. DOCUMENTACIÓN DE MODIFICACIONES:
6.1 Cabecera del 4gl

Registrar en la cabecera del 4gl modificado, la información referente al requerimiento que originó el
cambio e indicar en el cuerpo del código fuente, los cambios efectuados.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 19 de 85

En la cabecera se agregará, luego de la línea autor, la línea Modificaciones. Debajo de ésta, se


registrará:

(@#) Nnn-X Req RRR PPP - < titulo del requerimiento > Fecha

(@#) = Constante en cada modificación para poder ubicar fácilmente en qué punto se han efectuado
cambios.

Nnn = Correlativo de modificación por programa. Si es el primer cambio registrado, se consignará 1.

X = Si hay más de una modificación para el mismo requerimiento, se puede utilizar letras para
indicarlas.

RRR = Número de Requerimiento que origina el cambio, que se obtiene del software de pases a
producción

PPP = Iniciales del Programador; además nombre y primer apellido.

Fecha = Fecha en que se codifica la modificación

Correlativo: 001; Requerimiento: 1124; Programador: JGG José Gonzales

En caso de tratarse de un Help Desk, reemplazar el término “REQ”, por “HD”. El número de “helpdesk” se
obtiene del aplicativo que utiliza esta área.

En el cuerpo del programa, se señalarán los cambios realizados haciendo referencia al correlativo de
Modificación.

De esta manera podremos tener un registro detallado de las modificaciones efectuadas y la justificación
de las mismas.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 20 de 85

Como podrán observar el “(@#) 1-A” debe hacer referencia al mismo correlativo de modificación descrito
en la cabecera del programa. Es MUY IMPORTANTE que las marcas se encuentre en una línea solas.

Por ejm:

SI es válido

NO es válido

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 21 de 85

6.2 Cabecera de las funciones, librerías, Procedimientos almacenados, Servicios

Registrar en la cabecera de cada uno de estos segmentos de programa (inmediatamente después de


la línea FUNCTION), un breve detalle de la funcionalidad del mismo.

Ejemplo.

FUNCTION f0401_cantidad_valida_vt322()
# Descripción: Función que valida si el SKU cuenta con stock suficiente en el almacén de donde se desea realizar la
salida de mercadería.

6.3 Pase a bandeja QA del código creado o modificado

Todos los desarrollos 4gl, sea nueva aplicación o modificación a una existente, se acepta siempre
y cuando esté registrado en la WEB de Sistemas. Ahí se registrará la documentación exigida por
dicha página. Dentro de dicha documentación se encuentra:

 Instrucciones detalladas de la instalación


 Instrucciones detalladas de la reversión
 Documento de especificaciones
 Documento funcional
 Plan de pruebas
o Documento de plan de pruebas incluyendo por lo menos un escenario usando el
debug.
 Entidad Relación

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 22 de 85

 Diagrama de Procesos
 Diccionario de datos
 Guía de usuario

Adicionalmente, todo pase deberá incluir la validación del checklist de estándares y buenas
prácticas definido para tal fin.

Cuando un pase contenga querys de actualización de datos, la reversión debe incluir lo siguiente:

- Salvar el dato original en un archivo de salida (txt)

- Realizar la reversión tomando como base dicho txt

6.4 Funciones del gb000 no deben redundar en el programa principal solo deben ser
reutilizados.
Las funciones a reutilizar son las siguientes:

o Lista de funciones del gb000

6.5

Funciones en librerias.
Cada nueva función debe incluirse en un archivo distinto al procedimiento MAIN excepto
funciones de tratamiento de formularios y variables, ejemplo:

o Limpiar_campos..
o Llenar grilla.
o limpiar variables

7. FORMATO DE FORMULARIOS:
Las pantallas de cada opción del sistema estarán conformadas por elementos estándares que
serán de gran utilidad al usuario.
En la siguiente figura se muestran dichos componentes:

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 23 de 85

8. FORMATO DE REPORTES:
Tantos los reportes en TXT (ó .r) como los reportes que se exportan directamente al Excel, deben
mantener el mismo estándar de cabecera el cual es: Nombre del módulo, nombre del aplicativo, título
de la empresa, fecha de proceso, etc. Ejemplo:

Así mismo TODOS los aplicativos tipos “Reportes” deberán ser exportables a formatos TXT y a
formato EXCEL OBLIGATORIAMENTE. Los formatos en Excel deberán estar formateados en cuanto
a:

o Títulos centrados en sus celdas.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 24 de 85

o Los importes deberán tener los decimales previamente coordinados con el usuario solicitante.
o Los % deberán formatearse a 2 decimales salvo otra solicitud explícita del usuario.

8.1 Uso del Comando REPORT:


La generación de reportes NO debe usar el comando "ECHO", sino que en su lugar
utilizar el comando "REPORT"

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 25 de 85

Ejemplo:

9. ESTÁNDAR DE TECLAS DE USO FRECUENTE:


El sistema debe estar desarrollado de manera estándar para que el usuario utilice y coordine algunas
teclas para completar su finalidad.

 Esc.

Ésta tecla se utiliza principalmente para grabar una transacción o registro y para pasar al
próximo cuerpo de una pantalla.

 Control + C.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 26 de 85

Presionando al mismo tiempo estas teclas, el sistema cancela una transacción u operación que
se esté realizando (salir sin grabar), asimismo con esta combinación de teclas puede volver al
cuerpo anterior de una pantalla.

 Control + V.

Esta combinación de teclas, permite realizar una búsqueda en un campo específico de una
pantalla. Pueden darse dos casos según el campo y la cantidad de datos/variables que tuviera
este campo:

Si el campo en el que se realiza la búsqueda, tiene una cantidad limitada de datos o variables (ej.
Almacenes), el sistema despliega todos los datos en una subpantalla (Ventana emergente).

Cuando el campo en el que se realiza la búsqueda tiene muchas variables o se pueden crear muchas
opciones, una vez presionadas al mismo tiempo esta combinación de teclas, el sistema despliega una
sub pantalla donde debe establecer un criterio de búsqueda y puede utilizarse el asterisco (*) como
comodín, una vez establecido el criterio, presione entrar para que el sistema despliegue esos datos
según el criterio.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 27 de 85

TODOS los aplicativos deberán displayar “Mensajes de Ayuda” para facilitar al usuario el uso de estas
combinaciones de teclas.

Por ejm. si el cursor se encuentra en el campo “Ingrese Almacén”, se deberá displayar el mensaje
“Presione Control-V para consultar almacenes”.

 Control + B.

Con esta combinación de teclas, puede realizar una búsqueda de registros completos existentes
en una tabla específica. Esta función tiene dos pasos para completar una búsqueda.

Al presionar la combinación de teclas en la pantalla donde se realiza la búsqueda, el sistema


solicita que se establezca uno o más criterios de búsqueda para agilizar y desplegar sólo los
registros según el criterio.

Una vez establecidos los criterios, presione la tecla <Esc> el sistema desplegará los
registros/transacciones según el o los criterios establecidos.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 28 de 85

 Control + E.

Esta combinación de teclas permite en función a la ubicación del cursor:

a) Eliminar una línea ingresada en un campo.


b) Eliminar un registro o transacción.
Obviamente la eliminación de un registro es tan delicada según el tipo de registro que se desea
anular, por lo que en estos casos se debe consultar SIEMPRE al Jefe de Proyecto o Jefe de
Desarrollo de Sistemas.

 Control + Z.

Para reimprimir un comprobante o registro ya realizado, utilice esta combinación de teclas,


generalmente después de utilizar las teclas ctrl - b el sistema sugiere en la parte superior
izquierda el uso de esta combinación.

10. MANEJO DE ERRORES Y TRAZABILIDAD


Una forma de capturar errores sin necesidad de volver a ejecutar los programas es usar rutinas de
captura de errores en estos.
Básicamente el cambio es agregar la sentencia ‘CALL STARTLOG’ al inicio de cada programa:

 CALL STARTLOG("Archivo_de_log")

Donde Archivo_de_log: es el archivo donde se va a escribir el mensaje de error usando la sgte


nomenclatura: /u/temporal/LOG/<aplicativo>.log

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 29 de 85

Ejemplo:

Invocar al call startlog siguiendo a nomenclatura especificada anteriormente al inicio del aplicativo
(MAIN).

Para poder escribir el log usar el comando CALL ERRORLOG que tiene como parámetro la cadena
que se va a escribir en el archivo log.

NOTA IMPORTANTE
Al momento realizar el pase se debe de colocar en las instrucciones lo siguiente:

 Se debe de indicar al operador crear el archivo <Aplicativo>.log y copiarlos en la ruta


/u/temporal/LOG de los servidores del SFI y SAI (sai efe, sai curacao, sai efeselva, sai
Iquitos, sai motos y sai selvamotos)
 El área de operaciones debe de otorgar los permisos necesarios al archivo .log.

Este tipo de Trazabilidad también sirve si requieren manejar trazabilidad (log) en un aplicativo
interactivo como mantenedores o reporteadores.

11. SOBRE DDLS (Lenguaje de Definición de Datos):


 Si parte de lógica de un programa, librería, proceso nocturno se pasa a un DDL
(procedimiento almacenado, función, otros); entonces deberán considerar lo siguiente:
o Controlar y evitar que una misma parte de la lógica del negocio este plasmada en
varios fuentes (4gl, procedimientos almacenados, librerías, etc.).
o Ver que aplicativos utilizan esa misma lógica y actualizar para que llamen al DDL.
o Con esto evitaríamos que si se cambia la lógica del negocio (ejemplo: condiciones de
autorizaciones de descuentos), estar actualizando los mismo en diferentes
fuentes(4gl, ddl).
 Cuando el pase contenga un DDL (procedimiento almacenado, función, etc…), este debe ser
un archivo independiente de extensión .sql, es decir un único archivo por cada procedimiento
almacenado, porque esté se actualizará en el repositorio y el nombre del archivo debe ser el
mismo que el nombre del DDL: ejemplo: pa_sfi_lc_filtros_xquifax_piloto_lc328eay.sql

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 30 de 85

 Se ha agregado a la página de sistemas la funcionalidad de registro y separaciones de DDLs.


 Los DDL serán controlados tal cual se viene realizando con las fuentes 4gl, es decir: Los DDL
tendrán que ser registrados y separados en la página de sistemas; recuerden que las
separaciones y/o registros deben ser al inicio del desarrollo del requerimiento y no al momento
de realizar el pase.
 Dentro del archivo DDL debe contener el drop procedure: ejemplo:
DROP PROCEDURE pa_sfi_lc_filtros_xquifax_piloto_lc328eay;

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 31 de 85

12. MEJORES PRACTICAS DE PROGRAMACION 4GL INFORMIX


A continuación se pone al alcance de los desarrolladores las mejores prácticas de
programación, para que las aplicaciones ingresen a producción con la calidad requerida. Abarca
variables de programa, recomendaciones en la codificación de programas batcheros e
interactivos , manejo de fechas, performance, etc.

Asimismo, este documento contiene un punto con las recomendaciones proporcionadas por
Software Base, que todo desarrollador debe tener en cuenta al codificar las transacciones de
base de datos de un programa en 4gl de Informix.

Toda esta información y más, la encuentran en el siguiente LINK de IBM, a la cual TODO
analista programador de Efectiva tiene la obligación de inscribirse:

https://www.ibm.com/support/knowledgecenter/en/SSGU8G_11.70.0/com.ibm.cliapinode.doc/4gl.htm

EN GENERAL

12.1 Código Duro

No colocar código duro en los programas, para estos casos se recomienda las
siguientes opciones:

1. Deben ser parametrizados en la tabla de parámetros, lo cual facilitará su


mantenimiento. Esta parametrización debe ser cargada en la función
“p0000_prepara_constantes_<aplicativo>” y luego los valores deben ser
cargados en variables para su respectivo uso (if, where).

2. Para código duro y si es muy complejo el aplicar el primer punto, usar


contantes y deben ser declaradas e inicializadas en un archivo GLOBALS
ejemplo: user_id constant integer := 10;

https://www.ibm.com/support/knowledgecenter/en/SSBJG3_2.5.0/com.ibm.g
en_busug.doc/c_fgl_Globals_008.htm

3. Si se presentase el caso particular de atender un requerimiento para una


determinada inscripción, deberá incluirse en un archivo de entrada y al
ingresar a testing deberá estar acompañada del correo respectivo que
sustente su atención.
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 32 de 85

PROGRAMAS 4gl
12.2 Datos Principales de Programas Modificados

Cuando se modifique un programa en la cabecera de este se deben colocar siguientes


datos:

- Autor de la modificación
- Fecha de la modificación
- Breve descripción de la modificación del programa

Ejemplo :
#---------------------------------------------------------------------

# Modificaciones:
# 13-05-2002 RSLA Incidencia en la consulta de Carta Fianza

m 05.09.2002 CTE Cambiar fecha de ejecucion por fecha de puesta

# en servicio para TUPS en opcion de consulta

# 18.12.2002 EOB Se activa Consulta de Susp./Recon. LD en Submenu

# de Larga Distancia

#---------------------------------------------------------------------

12.3 Base de Datos

Cuando se utilicen tablas de base de datos dentro de un programa considerar lo


siguiente:

- Los comandos que accesan a tablas (select, update, insert, etc.) deben
controlar el éxito de la transacción con SQLCODE, el cuál en caso de error
debe ser mostrado con un campo editado.

Ejemplo :

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 33 de 85

define ws-sqlcode integer


let ws-sqlcode = sqlca.sqlcode
display 'Error en Base de Datos ' ws-sqlcode

No es recomendable efectuar la validación del éxito de la transacción con


el status.

- No se debe usar la sentencia SELECT * (asterisco) en una transacción de


lectura. Se debe utilizar la sentencia select extrayendo datos de las
columnas necesarias.

Ejemplo:
select dato1,dato2,dato3 from gt01_movped

- No se debe usar la sentencia select count(*), en una transaccion de lectura,


se debe usar un campo que contenga data

Ejemplo:
select count(CampoIndice) from gt01_movped

- Entre la ejecución de la sentencia BEGIN WORK y/o la(s) sentencias


COMMIT WORK/ROLLBACK WORK (entre el comienzo y el fin de una
transacción en la base de datos) , no debe haber interacción con el usuario
con sentencias como PROMPT, SELECT, INPUT, CONSTRUCT.
El comando sleep se puede aplicar con programas dinamicos, es decir
programas que interactua el usuario, no se aplica en procesos automaticos
que manejan transaccionabilidad.
Asi mismo no debe haber código innecesario que no corresponda a altas o
actualizaciones de registros, por ejemplo la rutina de impresión de
documentos no debe estar dentro de un begin - commit.

- En caso de utilizarse la sentencia SLEEP debe figurar con un valor máximo


de 3.
Ejemplo :
sleep 2

- Evitar el uso de FOR EACH anidados.


USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 34 de 85

- Los Nombres de las tablas temporales deben empezar con la palabra ‘tmp’.
Ejemplo :
create temp table tmp_t02

- En el uso y manejo de tablas temporales (select into temp) o creación de


tablas en la base de datos debe usarse el parámetro WITH NO LOG.

Ejemplo :

create temp table tmp_t02 ( cciudad char(5),

nroser integer,

ninscr integer,

tsecom char(1),

tdocid char(1),

ndocid char(15),

dpostal char(40),

ssecom char(1),

estado char(1)) with no log

- Evitar el uso de múltiples arreglos multidimensionales.

- No se debe inicialiciar arreglos completos (ya sea con el comando initialize o


let)

- Cerrar la transacción de base de datos con ROLLBACK o COMMIT.

- No se recomienda utilizar ROWID, ni ROWNUM en las lecturas.

- Dentro de la sentencia select no es recomendable que figuren funciones


matemáticas complejas.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 35 de 85

- No debe utilizarse la sentencia WHENEVER ERROR dentro de


transacciones de escritura (insert, update, delete).

- Evitar el uso de comandos MERGE, SORT.

- Dentro de sentencias repetitivas deberá verificarse el uso del comando


prepare. Se deben preparar las sentencias SQL y SP en una función
"p000_prepara_querys" y dicha función debe ser llamada en el inicio del
programa para luego ejecutar la sentencia preparada en cualquier lugar del
programa.
 Cabe mencionar que SÓLO se deberán de preparar los querys que
se ejecuten de manera repetitiva o dentro de cursores, NO prepara
todos los querys.

- Si se trata de una función llamada desde otro programa la sentencia


"prepare" para la ejecución de querys y SP, es preferible hacerla al principio
de la función.
Ejemplo (referencial) :

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 36 de 85

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 37 de 85

- Para el manejo de cursores tipo scroll debe figurar el comando fetch

Ejemplo :

Declare cust_ptr scroll cursor for


Select * from custome
Open cust_ptr
Fetch first cust_ptr into gr_customer

- Cuando se abra un cursor y es leido con la sentencia FETCH cerrarlo con


CLOSE y liberarlo con el comando FREE

Ejemplo :

close cur_insterc
free cur_insterc

- Las tablas temporales deben ser eliminadas al final del proceso.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 38 de 85

Ejemplo :
drop table tmp_x

- Si se va a eliminar una tabla temporal debe realizarse con el comando


‘DROP TABLE’.
Ejemplo :
drop table tmp_x

Cómo re utilizar una tabla Temporal

 Para el uso del comando DROP se debe crear una función de gestión de tablas
temporales, la misma que debe contar con parámetros que hagan dinámico el
mantenimiento. Estos son los parámetros :
o Numero de temporal, que estará identificando a la tabla temporal dentro de la
función.
o Acción, es la acción que se va a realizar con la tabla temporal, que será
1- create temp table
2- drop temp table
… y donde se requiera, se llamará a la función de tablas temporales indicándole el
número de la tabla y la acción a realizar.
Esto aplicará para cada 4gl principal.

12.4 Variables del Programa

En cuanto a las variables usadas en un programa considerar lo siguiente:

- Todo programa que levanta datos numéricos para realizar operaciones


aritméticas debe consistenciar que el valor no sea nulo y para los casos de
división debe consistenciar que no sea cero.

12.5 Programas Batcheros

Los programas batcheros deben consideran lo siguiente:

- Tener contadores de leídos, modificados, eliminados, etc. según sea el


caso, los cuales se mostrarán editados.
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 39 de 85

Ejemplo :

display 'Total Actualizados (gt754) : ',cont_limp

display 'Total Eliminados (gt763) : ',contd_limp

- En caso de ejecutarse el batchero a través del JS-PLAN :

 En el mensaje de errores incluirse en el texto "-F- ", siempre y cuando


consideren que el error es fatal o que se deba detener la ejecución de
los subsiguientes procesos.

Ejemplo :
display "-F- ErrorPSCB1"

 No usar la palabra reservada “ERROR” en los programas fuentes (4gl,


com).

 No debe tener salida al SPO .

 No deben incluirse las sentencias batch o at now.

Los procesos batch’s no deben de tener pantalla, o pedir alguna confirmación del
operador y se deben de ejecutar en background.

Se deben de tener estas consideraciones para poder ejecutar estos batch’s en


segundo plano.

 El proceso batch debe dejar log de trazabilidad y de errores (call


startlog).
 Dentro del archivo .SH la sentencia de ejecución del proceso se debe
hacer de la siguiente forma:

fglgo <batchero>.4gi EAY &

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 40 de 85

12.6 Programas Interactivos

- Para el manejo de cursores tipo scroll , la sentencia scroll debe figurar con
fetch (previous, next,last).

12.7 Arreglos

- En todo programa interactivo se debe considerar el control de desborde de


un arreglo, displayando el mensaje correspondiente en la pantalla.

12.8 Otros

- No se recomienda el uso de la sentencia call cuando la función devuelva un


solo valor. En este caso se recomienda usar la sentencia let or if.

Ejemplo :
let wltecmov = pro_busca_usutec()

- En los archivos Makefile debe figurar –s ( por ejemplo compilar el programa


conjuntamente con las librerias estáticas como el LIB_FILE que contiene el
rutinas.a ) .

Ejemplo :
.SUFFIXES: .o .ec .4gl .4go .4ga .4gi .per .frm .msg .iem

LIB_FILE=/home/ges/Financiera Efectiva/geslib/rutinas.a

4GL = gpga602b.4gl

# FORM = gpga602b.per

NAME_PROG = gpga602b.4ge

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 41 de 85

COBJS=$(4GL:.4gl=.o)

POBJS=$(4GL:.4gl=.4go)

CFORM=$(FORM:.per=.frm)

RDS_NAME=$(NAME_PROG:.4ge=.4gi)

CCODE: $(CFORM) $(COBJS)

c4gl -s -o $(NAME_PROG) $(COBJS) $(LIB_FILE)

@- echo 'Compilacion terminada '

- La sentencia wait para el nivel de bloqueo (set lock) debe ir acompañada del
tiempo correspondiente de espera, máximo 30.
Ejemplo :
set lock mode to wait 30

12.10. Comando ON Exception: controlador de error a nivel de procedimientos almacenados:


La sentencia ON EXCEPTION es un comando declarativo, no una declaración ejecutable. Por
esta razón, ON EXCEPTION debe seguir inmediatamente después de cualquier sentencia
DEFINE, y debe preceder a cualquier declaración ejecutable dentro del mismo bloque de
instrucción SQL del procedimiento almacenado.

Estructura basica de Control de Error y Validacion Satisfactoria del SP:

Se declaran variables para el control del error

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 42 de 85

Se inicializan variables en cero para su uso posterior.

Se usan las variables de validación de transacciones (INSERT, UPDATE, DELETE) en el


cuerpo del PA

Se usa el comando dbinfo para capturar el error.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 43 de 85

En caso devuelva error actualizamo la variable li_act_ok = 1, para un futuro rollback. Si la


varible li_act_ok queda en cero se realiza el commit.

Finalmente se retornará las variables de codigo de respuesta(lc_codrpta) y


descripcion(lc_desrpta)

12.11. Comando SET ISOLATION TO DIRTY READ para reportes.


Comando declarativo que realiza la lectura de los datos así el registro esté bloqueado o en
medio de una transacción, esto ayudará a obtener de forma más los datos consultados.

Solo Dirty Read proporciona acceso a las filas no confirmadas de las transacciones
concurrentes que posteriormente pueden revertirse.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 44 de 85

12.12. Comando SET LOCK MODE TO WAIT.


Realiza la lectura de datos solo cuando el registro esta desbloqueado. Si lo encuentra
bloqueado esperará hasta que sea desbloqueado.

No usar en Reporte ni consultas.

12.13 Creación de tablas temporales:


Las tablas temporales debes ser creadas con los comandos INTO TEMP tmp01 WITH NO
LOG por ser un comando que usa todos los dbspaces temporales de la base de datos.

No usar el create table ya que el comando sólo usa un dbspace temporal al momento de
creación.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 45 de 85

12.14. Los mensajes que se deben mostrarse al momento de consumir Web Services, deben
tener la siguiente nomenclatura a fin de poder identificar de manera más rápida el origen del
servicio que está siendo utilizado:

IP_WS_consumo + Nombre_WS - Método + Mensaje_de_Retorno_WS

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 46 de 85

12.15. Rango de fechas permitidas en ejecución de reportes.


El dato de cantidad de días para poder realizar los filtros se tendrá parametrizado por cada
reporte en la tabla efpar tanto del SAI y del SFI.

Los códigos de correlativo a utilizar son:

- 1457: para SFI


- 287: para SAI

Ejemplo de lo que debe contener un pase de este tipo:

Dónde:

efparpfij: Correlativo de la tabla gbcon

efpartxt1: nombre del aplicativo – reporte.

efparcor1: Almacenará la cantidad de días como rango de fecha que se validará en el


reporte.

efparstat: Estado del registro.

A nivel del reporte 4GL se deberá de invocar de la siguiente manera:

En el Main se debe setea la variable global “g_apli” de nombre aplicativo o reporte:

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 47 de 85

En la función de preparar constantes se seteará las variables globales de prefijo y estado.

Se creará la consulta en la función de preparar querys:

Finalmente se ejecutara el query pasándole los parámetros respectivos y se almacenara el


número de días en una variable de “l_corr” para su respectiva validación.

El valor del l_corr debe validarse que no exceda a la diferencia de fechas (inicial y final
del input en el reporte).

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 48 de 85

12.16. Comando PDQPRIORITY como parte del código 4GL.


No usar el comando PDQPRIORITY como parte del código 4GL
La variable de entorno PDQPRIORITY determina el grado de paralelismo que utiliza el servidor de base
de datos y afecta la forma en que el servidor de base de datos asigna recursos, incluida la memoria, los
procesadores y las lecturas de disco.

12.17. REPORTE o PROCESO MASIVO A EJECUTARSE EN EL SECUNDARIO.


Los reportes y procesos batch deben estar preparados para ser ejecutados en el servidor primario o
secundario, salvo indicación contraria del Analista Funcional y/o Jefe de Desarrollo.
Para ello se debe de utilizar la función f0215_verificar_servidor_gb000 tanto para SFI como para el
SAI.
En el pase a PRD se debe indicar por default su parametrizacion en el servidor secundario:
Configuración tabla efpar
Ejemplo SFI:

GBCON

EFPAR

Dónde:

efpartipo  0 = Secundario / 1 = Primario


efpartxt1  Nombre del programa
Para realizar dicha validación, se muestra en el siguiente ejemplo:

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 49 de 85

Nota: tomar como ejemplo pase 21562

Ejemplo SAI:

GBCON

EFPAR

Dónde:

efpartipo  0 = Secundario / 1 = Primario


efpartxt1  Nombre del programa

12.18. Carga con DBLOAD


Para poder realizar la carga se deberá de realizar los siguientes pasos:

1. Crear una carpeta y descargar los archivos adjuntos (*.txt).

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 50 de 85

Ejm:

2. Desde el prompt ejecutar el siguiente comando:


dos2unix *.txt -> Convierte a formato unix todos *.txt.

3. Realizar lo indicado en la pestaña querys en caso se realice una depuración de data.

Ejm:

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 51 de 85

4. Indicar que se copien los archivos de carga en la ruta: /u/temporal/DAT e ingresar al prompt.

5. Desde el prompt ejecutar el siguiente comando:

dbload -d tbsfi -c cmd_22951.txt -r -n 2000 -l log_22951.txt

cmd_22951.txt -> archivo con el query.

log_22951.txt -> txt que almacena log.

6. Se tiene que validar la cantidad de registros cargados.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 52 de 85

7. En caso de reversión ejecutar lo indicado en la pestaña querys

Nota: Tomar como referencia el pase 21608

13. RECOMENDACIONES

Las recomendaciones que se muestran a continuación, han sido dadas por consultores
expertos en Informix

1. Recomendaciones en Base de Datos

- El uso de la sentencia "set pdqpriority .." debe ser consultado con los DBA del
sistema.

- Usar las sentencia "prepare" para la ejecución de querys y SP, la preparación debe
es preferible hacerla al principio del programa.

- Si en el programa el uso es frecuente de la sentencia "insert", es recomendable


hacer uso de la sentencia "prepare" para insert.

- La optimización de los programas depende de quien desarrolla el modulo y debe


apoyarse de la sentencia "set explain" para ver el plan de ejecución de los querys.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 53 de 85

 2.- Todo cambio sobre la Base de Datos (campo, tabla, índice, etc) deben ser notificados
a una persona encargada de la B.D. por parte de Financiera Efectiva, el cual a su vez
notificará al resto del personal Financiera Efectiva, es recomendable la utilización de una
hoja control, para las modificaciones y observaciones.

 3.-Cuando se crea una tabla es necesario cambiar el modo de bloqueo, ya que por
defecto Informix crea las tablas con modo de bloqueo por Páginas, se puede utilizar la
siguiente instrucción después de creada la tabla. Esto en coordinación con el DBA.

ALTER TABLE nombretabla LOCK MODE (ROW)

 4.-Cuando exista la necesidad de borrar el contenido de una tabla completamente, se


recomienda crear primero el esquema de la tabla.

dbschema -d basededatos -t nombretabla -ss nombrearchivo

 luego hacer un drop de la tabla, para luego volver a crearla corriendo el esquema. Para
estos casos NO se debe utilizar :

delete from nombretabla

 porque hace un recorrido secuencial de la tabla para borrarla.



 5.-Utilizar en los programas las facilidades de la variable sqlca.sqlcode, para obtener
diferentes tipos de información, luego de haber realizado algún evento (update, insert o
delete). Ejemplo de la información que se puede obtener es:

 Si el evento se realizó satisfactoriamente,


 Si la columna está bloqueada,
 Si cuando se realizó un insert la Primary Key ya existía, etc. (revisar manual de SQL).

 6.-Para mejorar el rendimiento de los programas, es necesario utilizar la instrucción


PREPARE. Cada vez que se utiliza una instrucción SQL el manejador realiza diferentes
operaciones para procesarla:

 El manejador comprueba las sintaxis invalidas.
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 54 de 85

 El manejador optimiza la instrucción, para manejarla lo mas eficientemente posible


 El manejador verifica que el usuario que corre la instrucción SQL tenga todos los
permisos apropiados.
 Todas estas operaciones toman tiempo. Cuando se corren instrucciones SQL
repetidamente, aún cuando no cambie entre cada corrida, el manejador hace todas las
tareas anteriores lo cual es innecesario. Utilizando la instrucción PREPARE se puede
mejorar el uso repetitivo de esas operaciones.

 7.- Cuando se requiera migrar datos de una con más de 1,000 registros a otra tabla, es
recomendable hacer uso del comando dbload, esto mejora el performance
notablemente.
 La instrucción DBLOAD posee ciertos parámetros que podrían ser utilizados durante la
carga de data.

-d nombre de la base de datos

-c archivo que contiene commados

-l archivo log de rows no cargadas

-e Nº de rows no cargadas antes de abortar

-s chequeo solamente errores de sintaxis

-n Nº de filas antes de hacer commit

-i Nº de filas a ser ignoradas antes del comienzo

-r cargar sin hacer bloqueo de la tabla

-k cargar con modo de bloqueo exclusivo en tablas

Tener en cuenta los siguientes rangos para realizar la carga.

0 < 2000 Se puede omitir el parámetro de carga


2001 < 50000 Considerar el parámetro de 2000 por commit
50001 < … Considerar el parámetro de 5000 por commit

 8.-Utilizacion de los PREPARE

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 55 de 85

 La utilización de los PREPARE mejora considerablemente el performance de los


programas que hacen que hacen procesamiento de datos en ciclos repetitivos.
 Ej
:

DECLARE SEL_CUR1 CURSOR FOR

SELECT * FROM GT201_DEUDAS

FOREACH SEL_CUR1 INTO NEW201.*

DECLARE SEL_CUR2 CURSOR FOR

SELECT * FROM GT201_RUBROS

WHERE DR_CODCEN =NEW201.CCIUDAD AND

DR_SERV =NEW201.CSERFAC AND

DR_NUMDOC =NEW201.NFACCOB AND

DR_FCHEMI =NEW201.FEMIFAC

FOREACH SEL_CUR2 INTO T201R.*

INSERT INTO FINANCIERA EFECTIVA:GT201_RUBROS VALUES

(T201R.DR_CODCEN, NEW201.NINSCR,

T201R.DR_SERV, T201R.DR_NUMDOC,

T201R.DR_CODRUB, T201R.DR_MTORUB)

IF SQLCA.SQLCODE = -268 ...

END FOREACH

END FOREACH

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 56 de 85

 En este ejemplo se puede apreciar que existen dos ciclos repetitivos (el primero incluye
al segundo) esto quiere decir que la instrucción DECLARE que se encuentra dentro del
primer ciclo repetitivo, se realizará el mismo número de veces que ese ciclo repetitivo.

 La utilizacion de las instrucciones PREPARE en las instrucciones SQL hacen que la
parte del SQL que no varía, este practicamente pre-compilada y validada para el
manejador, lo que significa una mejora del performance en la ejecución de la instrucción
SQL.

 Para cada insert que se realiza en el segundo ciclo el manejador también tendrá que
validar la intrucción SQL, lo que significa gran perdida de tiempo, es necesario utilizar la
instrucción PREPARE
 Este fragmento de codigo se pudiera mejorar de la siguiente manera:

DECLARE SEL_CUR1 CURSOR FOR # como se utiliza una sola

vez no hay problema

SELECT * FROM GT201_DEUDAS

LET VAR_STMT=“SELECT * FROM GT201_RUBROS “,

“WHERE DR_CODCEN = ? AND “,

“DR_SERV = ? AND “,

“DR_NUMDOC = ? AND “,

“DR_FCHEMI =?“

PREPARE SEL_CUR2_STMT FROM VAR_STMT

DECLARE SEL_CUR2 CURSOR FOR SEL_CUR2_STMT

LET VAR_STMT2= “INSERT INTO FINANCIERA EFECTIVA:GT201_RUBROS

VALUES ”, “(?, ?, ?, ?, ?, ?)”

PREPARE INS_CUR1 FROM VAR_STMT2

FOREACH SEL_CUR1 INTO NEW201.*

OPEN SEL_CUR2 USING NEW201.CCIUDAD,

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 57 de 85

NEW201.CSERFAC,

NEW201.NFACCOB,

NEW201.FEMIFAC

FOREACH SEL_CUR2 INTO T201R.*

EXECUTE INS_CUR1 USING T201R.DR_CODCEN,

NEW201.NINSCR,

T201R.DR_SERV,

T201R.DR_NUMDOC,

T201R.DR_CODRUB,

T201R.DR_MTORUB

IF SQLCA.SQLCODE = -268 ...

END FOREACH

CLOSE SEL_CUR2

END FOREACH

 También es necesario que cuando se utilicen los cursores y se hagan SELECT *


FROM ... seleccionar solamente los campos necesarios, no todos (*), para mejorar el
uso de los recursos.

 9.- Utilización de la instrucción SET


 Con esta instrucción podemos colocar disponible o no uno o varios indices,
constraints o triggers, ya sea para la tabla completa o para alguno en particular
 Existen varios ejemplos para su utilización

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 58 de 85

A)Deshabilitacion individual:

set constraints r100_001, r300_451 disabled;

set indexes idx_solic disabled;

set triggers ins_solic disabled;

B)Deshabilitación por tabla

set contraints for gt01_solicitud disabled;

set constraints, indexes, triggers for gt01_solicitud disabled;

 Si se requiere saber el estado en que se encuentran los constraints, indices, o triggers


se puede ejecutar el siguiente query:

select costrname, state, tabname from systables a,

sysconstraints b, sysobjstate c

where a.tabid = b.tabid

and a.tabname not matches “sys*”

and a.tabname not matches “ V*”

and b.constrname matches”r*”

and c.name = b.constrname

order by tabname

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 59 de 85

2. Diseño de tablas
Concepto Ventaja Al no usar

1. Tipo de datos de
columnas

Tamaño de almacenamiento y
Integer vs. Smallint rango máximo. En el caso del
Integer tiene mayor
almacenamiento por ser de 4
bytes mientras que el smallint
solo es de 2 bytes.

El almacenamiento de un char
hace que el motor de BD rellene
de espacios en blanco hasta
completar la longitud, en el tipo
La longitud limite de varchar
varchar no se completa con
Char vs Varchar es de 255 caracteres.
espacios en blanco.

Float es de 4 bytes y smallfloat


de 2 bytes

Decimal es un tipo de dato


propietario del motor, las
operaciones aritméticas primero
las preprocesa el motor,
mientras que las operaciones
con un float, smallint, integer y
smallint lo realiza directamente el
Float vs Smallfloat procesador

Date es un tipo de dato integer


mientras que datetime es un tipo
Decimal vs Float manejado por el motor, las
operaciones en el datetime son
preprocesadas. El mismo caso
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 60 de 85

para un tipo Interval.

Date vs Datetime

Minimizar la cantidad de índices Para un caso de un índice


2. Creación de índices en un tabla optimiza el acceso a compuesto ix1(a, b, c, d)
los datos y tiempo de
índexación. En una arquitectura
de BD primaria y secundario, Es usado en filtros, joins,
cuando ocurre una operación de order by, group cuando las
reindexación, al finalizar, todas columnas estén en el orden
las páginas de índices son
puestos en el buffer de a
replicación para que la BD
secundaria las reciba. a, b

a, b, c

Es importante ponerse de a, b, c, d

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 61 de 85

acuerdo al momento del diseño a, b, c, d, e


de los índices para evitar que
durante la programación se Tener un índice adicional
redunde en los índices. como ix2(b, c, d) puede ser
minimizado a un solo índice
Evitar uso de índices con como ix1(b, c, d, a) y trabajar
campos de tipo char cuya los querys con él.
longitud sea grande, o con
columnas donde los valores
sean entre 2, 3 ... etc. Es
importante considerar el volumen
de información de la tabla.

A mayor número de columnas en El tamaño de los índices se


3. Tamaños de los una llave, mayor es el tamaño ve incrementado cuando
índices del índice, por lo que se interviene columnas de tipo
requerirá mayor espacio. char cuya longitud sea amplia.

La estructura de índice en
Informix es un Arbor B-Tree+. Al
espacio ocupado a la llave se le
debe agregar 5 bytes o 9 bytes
en caso que la tabla sea
fragmentada.

Al momento de ejecutar una


4. Indices unique búsqueda, al encontrar la
primera igualdad por los
componentes del índice unique,
el motor no continua buscando
otras coincidencias, cosa que
sucede con los índice de tipo
duplicado.

Las llaves primarias crean un


5. Llaves primarias índice de tipo UNIQUE, refuerza
la integridad de la información.
Por definición de integridad las
llaves primarias no aceptan
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 62 de 85

nulos.

Refuerza la integridad de la A muchas llaves foráneas en


6. Llaves foráneas información. Se apoya de índices una tabla, genera demasiados
(tipo duplicado) en las tablas índices.

Refuerza la integridad de la
7. Constraints Check información haciendo que
valores validos sean
almacenados en la tabla. El
código de validación ya no esta
en la aplicación sino en la base
de datos.

Refuerza la integridad de la
8. Valores por “default” información haciendo que sean
almacenados valores por defecto
y no valores NULOS. El control
lo tiene la Base de datos y no la
aplicación.

Funcionalidad del motor a partir Cuando la columna es


9. Funcionalidad “Alter de la versión 7.2X y posteriores. agregado al principio o al
in place” Consiste en columnas que sean medio de la tabla, el motor
agregadas al final de la fila, sólo reconstruye por completo la
se modifique el diccionario de tabla, generando los
datos y la estructura continué temporales y log necesarios
con la estructura anterior. para dicha operación de “alter
Conforme se vayan haciendo las table”. A mayor volumen de
actualizaciones (sentencias información de la tabla, el
UPDATE’s o INSERT’s), estas tiempo, los logs, los locks, el
filas con la antigua versión espacio son factores críticos
(estructura anterior) se cambia a en esta operación.
la nueva estructura de la tabla.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 63 de 85

Cuando se crea una tabla, el Una de las base de


10. Extents motor le asigna una cantidad optimización es tener el
consecutiva de paginas (por menor número de extent
defecto 8 páginas), al cual se le (menor a 8), es importante
conoce como EXTENT, si no se contar con el crecimiento
estimo el crecimiento de tablas estimado de la tabla, al
los extent van incrementando, momento de crear la tabla se
como consecuencia la le índica un primer extent
información se dispersa en el amplio que pueda contener
disco, haciendo mas dificultoso datos por un periodo de
las operaciones de I/O. tiempo largo.

Al momento de crear un tabla, se En el bloqueo de tipo PAGE,


11. Tipo bloqueo de puede especificar el modo de todas las filas que se
tablas bloque en él. Por defecto es de encuentren en esa página
tipo page. El modo de bloqueo permanecen bloqueadas
puede ser cambiado luego que hasta que la operación de
se creé la tabla. actualización termine (commit
o rollback).

Funcionalidad del motor que Las operaciones de I/O se


12. Fragmentación permite colocar en distintos concentra en un solo
de tablas fragmentos los datos de una dbspaces. El uso permite
tabla. Cada fragmento es explotar los beneficios de
colocado en distintos dbspaces multithread, paralelismo y
de acuerdo a una condición o en balanceo de I/O.
forma aleatoria.

3. Performance

Concepto Ventaja Al no usar

Temporales Se minimiza el tiempo de Se utiliza el área asignada a


respaldo, ya que no se respalda los datos, por ser temporal se
el área temporal. crea y luego se borra, la
asignación de espacio para
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 64 de 85

Se evita el uso de los dbspaces datos permanentes y


de datos y por lo tanto la temporales
select ... into temp ... constante fragmentación de ésta
with no log área. provoca la creación de
múltiples extents para una
Se evita el uso del rootdbspace, misma tabla, lo cual incide en
dbspace donde el manejador el performance de acceso a
escribe su propia actividad. dichas tablas.
create temp table
Balance de la carga de I/O. Las escrituras y lecturas en el
nombre ( ...
área de datos bajan el
No escribe la actividad generada performance general ya que
) with no log
en estos temporales en los logs, se genera mayor I/O en una
por lo tanto reduce el número de misma área de disco.
rollforward de operaciones
durante un proceso de recovery, Mayor frecuencia de
y al mismo tiempo los logs respaldos de los logs lógicos.
lógicos no se llenan tan rápido.
Mayor volumen de
No genera actividad en el log transacciones respaldadas.
físico, por lo tanto es una ventaja
para evitar el checkpoint con Mayor frecuencia de
mayor frecuencia. checkpoints implica actividad
de I/O más frecuente.

Al no usar la clausula with no


log esta tabla se crea en el
rootdbspace, aunque se
especifique la clausula temp.

Indices En un ambiente de Se puede provocar una


transacciones en línea, es lectura secuencial, lo cual no
importante el acceso directo a la es beneficioso si se trata de
data, el bloqueo de registros en un ambiente transaccional,
forma individual y su donde se requiere tiempos de
actualización directa provee de respuestas mínimos.
mayor nivel de disponibilidad del
resto de los registros..

La presencia de índices puede


USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 65 de 85

contribuir a reducir el tiempo de


respuesta.

Acceso a través del El rowid es un apuntador único Al utilizar el ROWID en una


rowid en una tabla a un registro de la tabla, consiste tabla fragmentada el acceso a
fragmentada en una combinación del Id del las tablas es más lento. Hay
fragmento con el rowid. que evitar su uso y sustituir
por el acceso a través de la
clave primaria. Adicional a ello
también evitar el uso del
ROWNUM

Transacciones cortas Menor contención de recursos Al mantener registros


bloqueados durante mucho
tiempo hace que otros
usuarios esperen por él,
incrementando los tiempos de
respuesta para otros usuarios.

Preparación de Mejora considerablemente el En cada iteración de una


instrucciones sql performance de los programas instrucción sql dentro de un
que hacen procesamiento de ciclo se realiza la validación
datos en ciclos repetitivos, la de la instrucción, chequea la
validación y optimización de la sintaxis, si el usuario tiene los
instrucción se realiza una vez en permisos para utilizar las
la preparación y no cada vez tablas y columnas
durante la ejecución. mencionadas y analiza la
instrucción para ejecutarla
eficientemente, trabajo que
implica tiempo y recursos.

Seleccionar las El manejador tiene la habilidad Los buffers internos utilizados


columnas necesarias en de leer a través de las páginas por el cliente son de un
una instrucción select de índices cuando las columnas tamaño fijo. Mientras más
mencionadas, son las que data se seleccione, más
intervienen en un índice en context switch se requerirá
particular, este tipo de lectura es para enviar la data desde el
la más rápida y eficiente servidor al cliente. El llenar los

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 66 de 85

buffers implica mayor tráfico


entre el cliente y el proceso
del servidor, lo cual tiene un
impacto directo en el
performance.

En una instrucción Ninguna Cuando se actualiza una tabla


update especifique solo indexada, no solo se
las columnas que se han actualizan las páginas de
cambiado, evite datos, sino también las
actualizar las columnas páginas de cada índice.
involucradas en un Actualizar el valor de una
índice clave implica : buscar en el
árbol B+tree hasta ubicar la
clave, borrar esa entrada del
índice, buscar la nueva
ubicación de la clave e
insertar el nuevo valor. Este
proceso se repite por cada
índice en el cual esté
involucrado las columnas
afectadas, por lo tanto mayor
tiempo se requiere para
realizar la actualización.

Subqueries Simplifica la búsqueda de datos. La utilización de subqueries


puede bajar el performance
del sistema, en casos donde
se prevé que las tablas
involucradas no exceden de
aproximadamente 15.000
registros pudiera utilizarse,
pero en casos contrarios es
conveniente la utilización de
tablas temporales.

Uso de cursores scroll Acceso directo a registros dentro Con este tipo de cursor se
crean tablas temporales para

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 67 de 85

de un lote consultado realizar el acceso directo,


incurriendo en una
sobrecarga en espacio y
tiempo, tiempo para procesar
y escribir los registros a una
tabla temporal, y espacio para
mantenerla. Esta sobrecarga
degrada el proceso,
especialmente cuando se
selecciona una gran cantidad
de registros.

Sleep N Detiene la ejecución por N Su uso es contraproducente


segundos para los tiempos de
respuesta.

Utilización de funciones Realizar cálculo matemáticos Pueden desmejorar los


matemáticas como sqrt(), durante la ejecución de tiempos de respuesta del
sin(), tan() instrucciones sql. sistema, cuando se tenga la
necesidad de utilizar
en las instrucciones sql. algunas de las funciones
matemáticas que ofrece
SQL, es necesario verificar
el tamaño de las tablas
involucradas el cual no debe
ser mayor a 10000
registros, en caso contrario
es necesario utilizar
cursores y a través de
funciones matemáticas
procesar la data, registro por
registro y realizar los
cálculos ; la explicación es
que el manejador no está
orientado a realizar cálculos,
sino funciones de base de
datos, por lo cual no es

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 68 de 85

eficiente en esta área.

Utilizar la opción -s en la Comprime el ejecutable final. Reduce el espacio ocupado


compilación : por el ejecutable.

c4gl -s Esto hace que durante la


ejecución exista menos
probabilidad de realizar
swapped out de los
programas.

Uso de variables Es la manera más eficiente de Su uso tiene un gran impacto


globales tener acceso a la data durante la en la memoria requerida para
ejecución de un programa. la ejecución del programa, por
lo cual se recomienda limitar
el uso de variables globales.

Esto a su vez hace que el


mantenimiento de los
programas se simplifique.

Cuando una variable global


cambia, hay que propagar
este cambio en todos los
programas que la usan.

Si una variable global no se


utiliza correctamente, son
causantes de errores lógicos,
a las cuales es difícil de
realizar un seguimiento.

Uso de variables locales. Su principal ventaja es el uso Su uso hace que los
eficiente del recurso memoria programas sean fáciles de
mantener, y de realizarles un
seguimiento.

Instrucciones Let e La instrucción let trabaja Limitar el uso de la instrucción


Initialize copiando en base a copia de initialize dentro de ciclos
repetitivos, como es el caso
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 69 de 85

bytes. de la inicialización de un
arreglo de registros, es más
La instrucción Initialize trabaja en eficiente realizar la
base a llamadas a subrutinas. inicialización para la fila 1, y el
resto con la instrucción let,
ejemplo :

for i = 1 to n

initialize arr[i].* to null

end for

cambiar a :

initialize arr[1].* to null

for i = 2 to n

let arr[i].* = arr[1].*

end for

En caso de un arreglo de un
tipo de datos simple, por
ejemplo enteros, es eficiente
utilizar la instrucción :

initialize arr to null.

Llamadas a funciones Permite estructurar y organizar Al retornar valores desde las


un programa, lo cual incide en el funciones, utilizar cualquiera
uso de bloques de instrucciones de las siguientes alternativas :
comunes.
let var = f_nombre()

if (f_nombre() = expresion)
then

Cualquiera de ellas es más


USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 70 de 85

eficiente antes que utilizar la


clausula returning. Sin
embargo al devolver más de
un valor desde la función es
inevitable utilizar esta
clausula.

Reabrir cursores Actualiza el conjunto de registros La instrucción open asigna


bajo las condiciones de la buffers de datos al proceso, y
definición del cursor y el la instrucción close libera los
contenido actual de las variables recursos asignados. Si un
involucradas en la definición del cursor abierto es nuevamente
mismo. abierto sin cerrarlo se
actualizan los datos sin
Hay una excepción cuando se incurrir en sobrecarga de
utilizan sub-índices en una asignación de buffers porque
definición de cursor, esta el proceso ya los tiene.
variable mantiene su valor
original y no el valor al ejecutar Al terminar de usar el cursor
el open del cursor se debe cerrar el mismo para
así liberar recursos.

Instrucción Free Libera recursos del servidor de El proceso mantiene recursos


base de datos asignados a una hasta que termina la sesión.
instrucción prepare o un cursor.
Al liberar memoria puede ser
reutilizada por otros procesos.

Cursores de inserción de Inserta los registros en un buffer Al no usar se genera un


datos. en la memoria del cliente, mayor tráfico en la red,
cuando se llena envía todos incidiendo en el performance.
estos registros al servidor,
incrementando el performance.

Debe utilizarse adicionalmente la


instrucción flush. Al no usar la instrucción flush
antes de cerrar la transacción
se corre el riesgo de que se
queden registros en el buffer y
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 71 de 85

se pierdan. El vaciado del


buffer es automático al
llenarse, por lo tanto para
asegurar que los últimos
registros vayan a la tabla hay
que obligarlo con esta
instrucción. Preguntar al DBA

Tecla de aceptación Es la tecla de aceptación por Su uso provoca una espera


ESC defecto. por la siguiente tecla, esto se
debe a que en Unix se tienen
teclas que comienzan por
ESC, e informix espera un
segundo adicional para
determinar si es
verdaderamente un ESC o no,
con cualquier otra tecla que
no use el ESC, se logra evitar
este instante de espera.

Stored procedures Al pasar código a la base de Al no usar no se aprovecha la


datos incide en menor tráfico de capacidad máxima que ofrece
datos en la red, ya que se envía el manejador OnLine 7.X,
una solicitud de ejecución desde quien permite realizar
el cliente, junto con unos operaciones de cache de
parámetros, el proceso se realiza stored procedures en
en el servidor quien envía una memoria, optimización del
respuesta al finalizar, código para obtener mejor
performance. Sin embargo el
mejorando el performance, exceso de stored procedures
simplificando la programación y el degrada el performance, para
mantenimiento de programas. Se ello se debe trabajar en
utiliza para ejecutar tareas conjunto con el dba, quien
repetitivas, que se comparten con determinará la incidencia y
muchos usuarios. ajustes en el ambiente para
evitar la degradación.

No se debe de invocar

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 72 de 85

stored’s procedure dentro


de otros stored’s
procedures, ni mucho
menos que estén dentro de
una sentencia bucle.

Uso de la instrucción set Produce una espera cuando los Al indicar una espera, debe
lock mode to registros a los cuales se quiere tomarse en cuenta que los
acceder están bloqueados. registros que se hayan
wait modificado dentro de la
Por defecto se trabaja en modo transacción estarán
wait not wait. bloqueados y no disponibles
not wait para otros usuarios, por lo
tanto se crea contención de
recursos, y por ende reduce la
concurrencia y baja el
performance.

Se recomienda su uso con


precaución, solo en procesos
críticos.

Procesos en background Permite la ejecución de procesos Al no usar el primer proceso


concurrentemente. tiene que esperar a que
termine el segundo, se
ejecutan en forma serial.

A menos que no se
entremezclen las tareas o que
un proceso dependa del otro,
se pueden ejecutar en
paralelo con la instrucción run
programa without waiting.
Esto mejora
considerablemente el
performance en este tipo de
procesos.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 73 de 85

Declaración de cursores Cuando la cantidad de registros a Su uso es completamente


extraer de la base de datos es necesario, sin embargo hay
desconocida, o son muchos que tomar en cuenta que :
registros se tiene que usar la
estructura de cursores para la no se debe realizar la
manipulación de los registros. declaración dentro de
estructuras cíclicas, por el
En el caso de cursores de contrario se realiza la
inserción se utilizan para lograr declaración del cursor fuera
mayor performance. del ciclo, y en cada iteración
se abre el cursor.

Uso de la instrucción Esta instrucción simplifica la Al usar esta instrucción hay


foreach. construcción de un ciclo, ya que que tener cuidado, si culmina
se escribe menos líneas de su ejecución hasta recorrer
código. Esta instrucción realiza el todo el conjunto de registros,
open del cursor, comienza un el cursor se cierra
ciclo extrayendo en cada paso un automáticamente, pero si se
registro, y al terminar cierra el ejecuta la instrucción exit
cursor. foreach, el cursor
permanecerá abierto, y por
ende consumiendo recursos
de memoria.

No debe utilizarse la
construcción siguiente :

foreach cursor1 into r1.*

...

foreach cursor2 into ..

...

foreach cursor3 into ....

....

end foreach

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 74 de 85

...

end foreach

...

end foreach

en la cual se observe un ciclo


foreach dentro de otro. La
razón es el performance, esto
es equivalente al caso
mencionado en el punto de
reabrir cursores.

Cada foreach, abre y cierra


cursor, lo cual implica
asignación y liberación de
buffers, esto se evita
utilizando en los ciclos
internos open de cursores, sin
cerrarlos dentro de los ciclos.

Sin importar la cantidad de


niveles, sólo el nivel
más externo puede
usar el foreach, los
niveles internos deben
ser open y un ciclo
para realizar los fetch
consecutivos. Tomar
en cuenta para
checklist

Procesos iterativos de Debido a las diferencias de Cuando se realizan ciclos


búsqueda de registros. tamaño que se presentan en las repetitivos para pocos
tablas, existen algunas registros, se pueden realizar
recomendaciones a seguir otros select dentro del ciclo
cuando se realizan ciclos para minimizar el tiempo que

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 75 de 85

repetitivos para pocos registros y se pierde haciendo un select


para miles de registros en complejo de muchas tablas en
beneficio del performance. un mismo cursor .

En cambio cuando se realizan


ciclos repetitivos para miles
de registros (mas de 100.000)
es conveniente seleccionar
toda la data que se va a
procesar y en el ciclo
repetitivo realizar solamente
el reporte, comparaciones o
asignaciones, sin realizar
otros select. Deben tenerse
en consideración los puntos
sobre uso de temporales,
columnas seleccionadas,
preparación de instrucciones
y uso de stored procedures.
Set pdqpriority # El uso de prioridades trae Por defecto las prioridades
beneficios si se cumple con: están desactivadas al menos
que se invoque a la sentencia.
Tener como mínimo 2 Puede tenerse efectos
procesadores, tablas contrarios el uso, ya que si
fragmentadas y los parámetros por ejemplo 5 sesiones
de configuración afinados. suman el 90 de prioridad y
La funcionalidad hace uso del una sexta (o mas sesiones)
paralelismos en los querys, sesión con prioridad 20 tendrá
que esperar dicha
creando mas thread para la
ejecución de un query. disponibilidad de recursos.

La asignación de prioridad a una


sesión puede ser de 0 a 100, El uso debe ser controlado.
siendo 0 desactivado y 100 el
mas alto y el valor significa
cuanto de recursos se le va
asignar a la sesión para la
ejecución de un query.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 76 de 85

“trace” en Store Permite realizar un seguimiento al


procedure código de los store procedure. El
uso debe ser en la etapa de
desarrollo. No se permite su uso
en los ambientes de producción.

“Explain” o plan de El uso de la sentencia “set Su uso permite optimizar los


ejecución de querys explain on” permite ver parte del query en la etapa de
plan de ejecución de un query en desarrollo. Se debe evitar en
el archivo “sqexplain.out” creado los ambientes de producción.
en el directorio actual.

En la versión 7.31 y posterior


teniendo el explain en off, puede
verse el plan de ejecución de un
query en particular usando :

Select --+ EXPLAIN

From ....

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 77 de 85

4. Generalidades

Concepto Ventaja Al no usar

Librerías de funciones Agrupa un conjunto de funciones Se duplica el código, cada


comunes a la aplicación, programador con su propio
simplifica la programación al estilo construye una función
compartir código. con la misma finalidad.

Es de fácil mantenimiento, solo Su mantenimiento es


se requiere recompilar los realmente costoso y a
programas que hacen uso de las menudo hasta imposible.
librerías.

Como estándar, para identificar


una función de librería dentro de Al no usar un estándar, se
cualquier programa, se establece debe prever un mecanismo de
que su nombre comience con las ayuda que permita
siglas lib. rápidamente ubicar todos los
programas que utilicen una
determinada función de
librería, para recompilar en
caso de alguna modificación.

Capturar los errores El capturar el mensaje de error Se dificulta la búsqueda del


durante la ejecución. en un archivo, permite ubicar las error, y en consecuencia
fallas del sistema y así depurar modificar un programa sin
los programas de manera tener certeza del problema
efectiva. produce pérdida de tiempo.

Se debe utilizar la instrucción


startlog y whenever error.

Obtención de valores por Este registro contiene la


medio del registro sqlca información detallada del estado
de la ejecución de la instrucción
sql que se acaba de ejecutar.

sqlca.sqlcode contiene el estado

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 78 de 85

de ejecución de la instrucción
sql.
Al no usar se incurre en :

se puede obtener el estado de


ejecución con la variable
estatus, pero en esta variable
se atrapan otros errores, es
sqlca.sqlerrd[2] contiene el valor mas confiable utilzar
serial asignado. sqlca.sqlcode.

Al no usar se incurre en la
sqlca.sqlerrd[3] contiene el
necesidad de realizar selects
número de registros procesados,
si la instrucción es un insert, a las tablas, lo cual no es
delete o update. beneficioso para el
performance.
sqlca.sqlwarn[7] indica cual es la
base de datos que está siendo
utilizada, W si es el servidor Al no usar puede estar
replicado, y blanco si es el intentándose realizar
servidor principal. operaciones de escritura
sobre el servidor secundario,
el cual está restringido a solo
lectura.

5. Funcionalidades del Informix

Concepto Ventaja Al no usar

Al recuperar una tupla del


13. Nvl(columna, SELECT la “columna” tenga un
valor) NULL, se reemplaza por el
“valor”

Select NVL(dirección, ‘ Dirección


USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 79 de 85

errada’)

From tabla1 ...

Permite obtener distintos Evitar expresiones complejas,


14. Case resultados a través de una por cada fila la expresión es
expresión case. Ej: evaluada.

Select cust_name. Es importante que se coloque


una expresión en el “ELSE”
CASE para evitar valores perdidos.
WHEN num_probs = 0

THEN 100

WHEN num_probs > 0 AND

Num_probs < 4

THEN num_probs * 500

ELSE num_probs

END n_probs,

Cust_address

From customer

Similar a la sentencia CASE, la Evitar expresiones complejas,


15. Decode expresión se trabaja como una los mismos criterios que la
función. Ej: sentencia CASE.

Select DECODE(City,

“Menlo Park”, “Local”,

“Palo Alto”, “Tall Tree”,

city)

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 80 de 85

from customer

Ej. Con case:

Select

CASE

WHEN city = ‘Menlo Park’

THEN ‘Local’

WHEN city = ‘Palo Alto’

THEN ‘Tall Tree’

ELSE city

END

From customer

Convierte el String a un tipo


16. To_date (String) date, de acuerdo al formato si se
especifica. Ver Informix Guide
To_date(String, SQL, Informix Guide to GLS
Functionality.
formato)

Subtrae cadenas de una


17. Substr(columna, expresión string. Ej:
Inicio) select

Substr(expresión, substr('ABCDEFG', -3),

Inicio) substr('ABCDEFG', 0),

substr('ABCDEFG', 3)

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 81 de 85

from tabla

Resultado:

EFG ABCDEFG CDEFG

Reemplaza un substring por otro.


18. Replace(source,
oldstr, newstr)

LPAD retorna un string de


19. Lpad(string, longitud “length” que es
length, padstr) completado con el “padstr” a la
izquierda.

Rpad(string, length, RPAD es similar al LPAD con la


padstr) diferencia que se completa a la
derecha.

Upper convierte a mayúscula


20. Upper(col ó Str)
Lower convierte a minúscula
Lower(col ó Str) Initcap convierte el primer
carácter de cada palabra a
InitCap(col ó Str) mayúscula y el resto a
mayúscula.

Ahora es posible usar la cláusula


21. Create view UNION para crear vistas.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 82 de 85

Esta funcionalidad permite que


22. Tablas uno o mas fragmentos de una
residentes tabla, la tabla completa o uno o
mas índices permanezca en los
buffers de memoria compartida.
Esto permite evitar hacer
operaciones I/O a disco. Su uso
debe ser evaluado.

14. CONSIDERACIONES ADICIONALES:

14.1 PARA EL DESARROLLO DE APLICACIONES


Las siguientes directivas deberán tenerse en cuenta al momento de desarrollar un requerimiento o
proyecto:
 Al momento de registrar el dato tipo “Fecha” tener en cuenta que existen dos fechas distintas
a guardar:
 Fecha de registro: es la fecha de la transacción, es decir es la fecha de la tabla de
parámetros del sistema
 Fecha de Proceso: es la fecha que se utiliza para auditoria o log, y viene a ser la fecha
del sistema operativo o la del día en curso.
 Los aplicativos deben mostrar mensajes informativos y de ayuda siguiendo el estándar
señalado en el punto 9. Estándar de Teclas de Uso Frecuente.
 Si el desarrollo que están realizando implica cambios en la estructura de una tabla existente
(agregar o quitar campos, modificaciones en los atributos, etc), el pase a producción debe
incluir también los aplicativos que requieran ser modificados y que utilicen dicha tabla, para lo
cual deberán revisar y modificar todos los aplicativos involucrados.
 Si el desarrollo que están realizando implica cambios en librerías, el pase a producción debe
incluir también los aplicativos que utilicen la función modificada (FUNCTION) de dicha librería,
para lo cual deberán recompilar todos los aplicativos involucrados.
 Asegurarse de no mantener dentro del código sentencias DISPLAY o SLEEP que no sean
necesarias.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 83 de 85

 Las variables globales al momento de ser declaradas también debe tener un comentario de su
uso en el aplicativo.
 Las tablas temporales siempre deben incluir la sentencia WITH NO LOG para que no generen
logs.
 El ingreso de datos en campos tipo texto debe ser siempre en mayúsculas, salvo casos en
que amerite lo contrario, por ejm. en carga de interfaces (archivos a cargar).
 En los querys siempre anteponer la base de datos de la tabla, ejemplo:
o Update tbsfi:pcmpc set . . .
 El nombre del menú de aplicativos nuevos, debe ser igual al título del aplicativo; esto con la
finalidad de poder encontrar el aplicativo rápidamente en el menú guiándonos por el título.
 Ejemplo de aplicativo que el nombre del menú es diferente al título del aplicativo.
o SAI -> VENTAS -> PROGRAMAS EFE -> GENERAR NEW REMS
 Los nombres de los .txt que se utilizan para descargar información (unloads) que
posteriormente se pueden utilizar para la reversión debe ser estándar, esto para evitar que se
chaqueen con otro archivo con el mismo nombre.
o tabla_rev(fecha).txt;
o ejemplo: pcmpc_rev29042011.txt
 Comúnmente al momento de desarrollar se comentan líneas de código para realizar pruebas
de lo que solo se ha modificado, El problema es que cuando compilan para realizar el pase se
olvidan de descomentar lo que solo se había comentado para probar; aquí algunas
recomendaciones para no cometer este error:
o Cuando se comente líneas de código para pruebas unitarias se coloque la siguiente
marca “ #comentado para pruebas ”
o Luego al momento de realizar el pase se deberá buscar la marca para descomentar y
dejar como estaba inicialmente.
o QA si detecta la marca indicada en el código fuente, comunicara al analista para que
revise si se olvidó de descomentar lo que comento para pruebas.
 Evitar programar con código duro; mucho más si los códigos se tratan de descuentos o
campañas; analizar el criterio de las condiciones y parametrizar, Control de Calidad no
realizará pases a producción de los aplicativos críticos (preventa, facturación, caja) de los
nuevos desarrollos (líneas de código nuevas o modificadas) que contengan código duro; salvo

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 84 de 85

correo adjunto de conocimiento del jefe de desarrollo y casos de emergencia; que por
supuesto luego se realizara otro pase con el desarrollo correcto (sin código en duro).
 Si la funcionalidad de un aplicativo está fallando porque el código esta en duro, es deber del
analista darle solución y no seguir agregando más códigos en duro, el gran problema es que si
se sigue desarrollando de esa manera, darle mantenimiento al código se va hacerse mucho
más difícil, engorroso y demandara más tiempo.

14.2 PARA LA ELABORACION DE STORES PROCEDURES:


 Utilización correcta de Stores Procedures
o Algunas mejoras de rendimiento puede ser realizado cuando varias sentencias SQL
se ejecutan en un único procedimiento almacenado. Puesto que el procedimiento
reside directamente en el motor de base de datos cliente / servidor, el tráfico se
reduce, especialmente en una red de área amplia. El análisis y la optimización
también podría reducirse ya que el procedimiento se guarda en caché como pseudo-
código, no tiene que ser analizado, y puede que no requieren re-optimización.
 Utilización Incorrecta
o Rutinas de computación intensiva, es decir realizar funciones de CPU en
store no es recomendable esto debe realizarse en un ESQL / C ,4gl para nuestros
casos o .net.
o Este caso de mal uso de un store presenta en el procedimiento de potencia en su uso
dentro de un bucle en la facturación la cual causa consumo y segundos
de bloqueos, recordemos que los segundos cuentan en época de campaña.

Ejmp. Como se puede apreciar para obtener la potencia de un número se utiliza un


store que realiza una consulta al motor de base de datos,
tabla del sistema es decir consume recursos del motor, pudiendo realizarse un
algoritmo para la obtención de la potencia en un lenguaje o librería en C o 4gl.

create procedure "tbase".potencia(w_base float, w_exponente float) returning float;

define w_resultado float;


let w_resultado = 0;
select pow(w_base, w_exponente) into w_resultado
from systables
where tabid = 1;
USO INTERNO RESERVADO
CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION
Estándares y Buenas Prácticas
Normativa MUS-025-COS-01
de Desarrollo
Elaborado Por: Jefatura de Desarrollo de
Revisado por: Gerencia de Sistemas Aprobado por: Comité Operativo de Sistemas
Sistemas
Fecha de Publicación: 16/08/2011
Fecha de Aprobación: 15/08/2011 Fecha última actualización: 16/04/2018 Página: 85 de 85

return w_resultado;
end procedure;

 Filtros
o En campos de tipo CHAR y VARCHAR los filtros deben hacerse utilizando comillas
(“”), la falta de uso de las comillas a los filtros de estos tipos de datos aumenta
considerablemente el costo del query.

Ejmp.
SELECT gbagetdid,gbagendid,gbagecage,gbagenomb
FROM gbage WHERE gbagetdid = "1"
AND gbagendid ="4739681694"

 Comando “UPDATE STATISTICS”


En los aplicativos 4GL ó SP No se debe utilizar el comando “UPDATE
STATISTICS” ni en tablas físicas ni en temporales, puesto que DBA realiza este
comando dos veces al día como parte de sus operaciones, este comando hace
que los procesos tengan que realizar dicha tarea haciendo un doble trabajo y
ocupando más tiempo al proceso. Y si algún requerimiento modifica algún
proceso en donde se está usando este comando, es deber del analista
comentar la línea en donde este escrito.

USO INTERNO RESERVADO


CUALQUIER COPIA IMPRESA DE ESTE DOCUMENTO SERA CONSIDERADO COMO COPIA
NO CONTROLADA
LA VERSION VIGENTE SE ENCUENTRA PUBLICADA EN LA PÁGINA DE INTRANET, SE
COMUNICARA SI EXISTE UNA NUEVA VERSION

También podría gustarte