Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROPIETARIO
Gerencia de Sistemas
PROPÓSITO
APLICACIÓN
FUNCIONES AFECTADAS
PUBLICACIONES RELACIONADAS
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.
HISTORIA DE REVISIONES:
VERSI
VIGENCIA AUTOR JUSTIFICATIVA
ÓN
Jorge Cachay Arana – Jefe de Desarrollo
Carlos Quiroz – Jefe de Proyecto
Guillermo Barboza- Jefe de Proyecto
CONTENIDO
1. OBJETIVO
FABRICA 4GL
ALMACENADOS Y FUNCIONES
5. MODULOS
6. DOCUMENTACIÓN DE MODIFICACIONES
7. FORMATO DE FORMULARIOS
8. FORMATO DE REPORTES
13. RECOMENDACIONES
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.
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).
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.
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>
El prefijo “t” lo identifica como una tabla declarada antes del comando MAIN en el
aplicativo.
El prefijo “l” lo identifica como una tabla declarada dentro de una función específica.
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.
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).
o Programas Batcheros
eefparpfij=270
eefpartxt1='nombre de aplicativo'
Ejemplo:
Ejemplo:
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"
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”.
ad = módulo administrador
gb = módulo agenda
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:
arc_datos byte,
ind_sisorigen char(2)
v_<sistema>_<modulo>_<nombre de la vista>
Ejemplo: v_sai_in_ListarAlmacenes()
Ejemplo: v_sai_in2012_ListarAlmacenes
Ejemplo: pa_sai_in_ListarAlmacenes()
Ejemplo: pa_sai_in2012_ListarAlmacenes
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.
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()
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.
END PROCEDURE;
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.
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.
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
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.
(@#) 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.
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
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.
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
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.
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:
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:
6.4 Funciones del gb000 no deben redundar en el programa principal solo deben ser
reutilizados.
Las funciones a reutilizar son las siguientes:
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:
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 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.
Ejemplo:
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.
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.
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.
Una vez establecidos los criterios, presione la tecla <Esc> el sistema desplegará los
registros/transacciones según el o los criterios establecidos.
Control + E.
Control + Z.
CALL STARTLOG("Archivo_de_log")
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:
Este tipo de Trazabilidad también sirve si requieren manejar trazabilidad (log) en un aplicativo
interactivo como mantenedores o reporteadores.
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
No colocar código duro en los programas, para estos casos se recomienda las
siguientes opciones:
https://www.ibm.com/support/knowledgecenter/en/SSBJG3_2.5.0/com.ibm.g
en_busug.doc/c_fgl_Globals_008.htm
PROGRAMAS 4gl
12.2 Datos Principales de Programas Modificados
- 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
# de Larga Distancia
#---------------------------------------------------------------------
- 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 :
Ejemplo:
select dato1,dato2,dato3 from gt01_movped
Ejemplo:
select count(CampoIndice) from gt01_movped
- Los Nombres de las tablas temporales deben empezar con la palabra ‘tmp’.
Ejemplo :
create temp table tmp_t02
Ejemplo :
nroser integer,
ninscr integer,
tsecom char(1),
tdocid char(1),
ndocid char(15),
dpostal char(40),
ssecom char(1),
Ejemplo :
Ejemplo :
close cur_insterc
free cur_insterc
Ejemplo :
drop table tmp_x
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.
Ejemplo :
Ejemplo :
display "-F- ErrorPSCB1"
Los procesos batch’s no deben de tener pantalla, o pedir alguna confirmación del
operador y se deben de ejecutar en background.
- Para el manejo de cursores tipo scroll , la sentencia scroll debe figurar con
fetch (previous, next,last).
12.7 Arreglos
12.8 Otros
Ejemplo :
let wltecmov = pro_busca_usutec()
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
COBJS=$(4GL:.4gl=.o)
POBJS=$(4GL:.4gl=.4go)
CFORM=$(FORM:.per=.frm)
RDS_NAME=$(NAME_PROG:.4ge=.4gi)
- 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
Solo Dirty Read proporciona acceso a las filas no confirmadas de las transacciones
concurrentes que posteriormente pueden revertirse.
No usar el create table ya que el comando sólo usa un dbspace temporal al momento de
creación.
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:
Dónde:
El valor del l_corr debe validarse que no exceda a la diferencia de fechas (inicial y final
del input en el reporte).
GBCON
EFPAR
Dónde:
Ejemplo SAI:
GBCON
EFPAR
Dónde:
Ejm:
Ejm:
4. Indicar que se copien los archivos de carga en la ruta: /u/temporal/DAT e ingresar al prompt.
13. RECOMENDACIONES
Las recomendaciones que se muestran a continuación, han sido dadas por consultores
expertos en Informix
- 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.
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.
luego hacer un drop de la tabla, para luego volver a crearla corriendo el esquema. Para
estos casos NO se debe utilizar :
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.
DR_FCHEMI =NEW201.FEMIFAC
(T201R.DR_CODCEN, NEW201.NINSCR,
T201R.DR_SERV, T201R.DR_NUMDOC,
T201R.DR_CODRUB, T201R.DR_MTORUB)
END FOREACH
END FOREACH
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:
“DR_SERV = ? AND “,
“DR_NUMDOC = ? AND “,
“DR_FCHEMI =?“
NEW201.CSERFAC,
NEW201.NFACCOB,
NEW201.FEMIFAC
NEW201.NINSCR,
T201R.DR_SERV,
T201R.DR_NUMDOC,
T201R.DR_CODRUB,
T201R.DR_MTORUB
END FOREACH
CLOSE SEL_CUR2
END FOREACH
A)Deshabilitacion individual:
sysconstraints b, sysobjstate c
order by tabname
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.
Date vs Datetime
a, b, c
Es importante ponerse de a, b, c, d
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.
nulos.
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.
3. Performance
Uso de cursores scroll Acceso directo a registros dentro Con este tipo de cursor se
crean tablas temporales para
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.
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
end for
cambiar a :
for i = 2 to n
end for
En caso de un arreglo de un
tipo de datos simple, por
ejemplo enteros, es eficiente
utilizar la instrucción :
if (f_nombre() = expresion)
then
No se debe de invocar
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.
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.
No debe utilizarse la
construcción siguiente :
...
...
....
end foreach
...
end foreach
...
end foreach
From ....
4. Generalidades
de ejecución de la instrucción
sql.
Al no usar se incurre en :
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.
errada’)
THEN 100
Num_probs < 4
ELSE num_probs
END n_probs,
Cust_address
From customer
Select DECODE(City,
city)
from customer
Select
CASE
THEN ‘Local’
ELSE city
END
From customer
substr('ABCDEFG', 3)
from tabla
Resultado:
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
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.
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"