Manual de COBOL.

Transcripción

Manual de COBOL.
MANUAL DE SUPERVIVENCIA
Conceptos básicos para mis amigos Coboleros
Software Factory de Cáceres – CENIT
INSA
Rafael Campillo Lorenzo
CÁCERES – Año lectivo 2006 – 2007
"There is no way to happiness. Happiness is the way.
There is no way to peace. Peace is the way.
There is no way to enlightenment. Enlightenment is the way."
...Thich Nhat Hanh-Buddha
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ÍNDICE
ÍNDICE DE FIGURAS. ............................................................................................... 4
1. MVS (Multiple Virtual Storage) .............................................................................. 6
2. ISPF (Interactive System Productivity Facility)........................................................ 7
3. CICS. (Customer Information Control System) ....................................................... 8
4. Características de los programas bajo CICS. BATCH vs ON LINE............................ 9
5. La Arquitectura de Desarrollo.............................................................................. 10
6. SQL. DB2. cursores. ........................................................................................... 12
6.1. Cursores....................................................................................................... 13
6.2. Documentación para las pruebas de las tablas DB2 utilizadas ....................... 14
7. PROGRAMAS DE REARRANQUE Y
rEPOSICIONAMIENTO. ARQUITECTURA
BATCH. .................................................................................................................. 16
7.1. Funcionamiento del DB2............................................................................... 16
7.2. Rearranque de programas ............................................................................. 16
7.3. Ficheros dinámicos para salida ..................................................................... 16
7.4. Soporte Físico ............................................................................................... 17
7.5. Concatenación de Ficheros............................................................................ 17
7.6. Borrado de Ficheros de COMMIT. .................................................................. 17
7.7. Borrado Ficheros Ultimo Commit. ................................................................. 18
7.8. Ejemplos de JCL's. ........................................................................................ 18
7.9. Esqueletos .................................................................................................... 18
7.10. Tratamiento a seguir por los programas de aplicación en base a un ejemplo
real. Programa LQBBN01. .................................................................................... 19
8. JCL (JOB CONTROL LANGUAJE) ........................................................................ 44
8.1. Ficheros........................................................................................................ 44
8.2. VTOC. Tabla de contenido del volumen.......................................................... 44
8.3. Ficheros Particionados: PDS.......................................................................... 45
8.4. Formas de localizar un fichero. Catálogos ...................................................... 45
8.5. Lenguaje de Control de Trabajos. Sintaxis. .................................................... 45
8.6. Sentencia JOB .............................................................................................. 45
MSGLEVEL(A,B) ............................................................................................... 45
MSGCLASS ...................................................................................................... 46
CLASS.............................................................................................................. 46
NOTIFY ............................................................................................................ 46
TIME ................................................................................................................ 46
TYPRUN ........................................................................................................... 46
RESTART ......................................................................................................... 46
2
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
REGION ........................................................................................................... 46
COND O IF/END/ELSE .................................................................................... 46
8.7. Sentencia DD................................................................................................ 46
DSN ................................................................................................................. 47
DISP................................................................................................................. 48
UNIT ................................................................................................................ 49
VOL.................................................................................................................. 49
DCB ................................................................................................................. 49
SPACE ............................................................................................................. 49
DIR .................................................................................................................. 49
SYSOUT ........................................................................................................... 49
8.8. Sentencia EXEC............................................................................................ 49
Nombre del programa ....................................................................................... 49
NOMBRE DEL PROCEDIMIENTO...................................................................... 49
Acct.................................................................................................................. 50
Addrspc............................................................................................................ 50
Cond ................................................................................................................ 50
Dprty ............................................................................................................... 50
Dynamnbr ........................................................................................................ 50
Parm ................................................................................................................ 50
Perform ............................................................................................................ 50
Rd .................................................................................................................... 50
Region .............................................................................................................. 50
time ................................................................................................................. 50
8.9. Utilidades de JCL.......................................................................................... 50
IEHLIST ........................................................................................................... 51
IEBGENER ....................................................................................................... 51
IEBCOPY .......................................................................................................... 52
IEBCOMPR....................................................................................................... 52
IEFBR14 .......................................................................................................... 52
DFSORT ........................................................................................................... 52
DFDSS ............................................................................................................. 53
8.10. Sentencias avanzadas JCL. CONCATENACIÓN DE FICHEROS ..................... 53
REGLAS DE CONCATENACIÓN ........................................................................ 53
ANEXOS ................................................................................................................. 55
ANEXO A: Notas y apuntes sobre COBOL y codificación. ...................................... 55
ANEXO 1: Listado de FILE – STATUS.................................................................... 57
ANEXO 2: Tutorial de los SQLCODES y sus causas .............................................. 62
3
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 2.B SQLCODES EN CASTELLANO. ......................................................... 82
ANEXO 3: ABEND CODES bajo TSO / ISPF.......................................................... 88
ANEXO 4: Utilidades y Objetos para el Reposicionamiento Batch. ......................... 92
ANEXO 4.1. DAREPOS..................................................................................... 92
ANEXO 4.2 DAPROCBATCH. ............................................................................ 93
ANEXO 4.3. INCLUDES y COPYS. ..................................................................... 94
URCOPYS......................................................................................................... 94
URMENSA ........................................................................................................ 95
URSWITCH....................................................................................................... 95
URSQLCOD...................................................................................................... 96
URWORK.......................................................................................................... 96
URDCLGEN ...................................................................................................... 97
URCURSOR ...................................................................................................... 97
ANEXO 4.4 Funciones. XX_CANCELACION_PROCESOS_BATCH. ........................ 98
ANEXO 4.5. JCL REPOSICIONAMIENTO ........................................................... 99
ANEXO 5. Enfrentamiento de ficheros. ............................................................... 101
ANEXO-SORT .................................................................................................... 103
Ordenación básica .......................................................................................... 103
Ordenación parcial ......................................................................................... 104
Copia de un fichero......................................................................................... 105
Copia parcial de un fichero ............................................................................. 106
Ordenar y cambiar disposición de campos....................................................... 107
Eliminar repetidos .......................................................................................... 108
Acumular ....................................................................................................... 109
Operadores y tipos de datos ............................................................................ 109
ANEXO 6. just enough ispf................................................................................. 111
ANEXO 7- DESCRIPCION FILE STATUS EN ESPAÑOL........................................ 132
ANEXO 8 -PROGRAMACION UTILIZANDO HOST Y ARQUITECTURA ISBAN ........ 135
ÍNDICE DE FIGURAS.
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
1 - Subsistemas del OS-390 ........................................................................... 8
2 - Arquitectura de desarrollo ....................................................................... 10
3 - Herramientas de la arquitectura de desarrollo ......................................... 10
4 - Herramientas de desarrollo ON-LINE ....................................................... 11
5 - Campos de la tabla DAREPOS ................................................................. 92
6 - Campos de la tabla DAPROCBATCH ........................................................ 93
7 - Parámetros de la función XX_CANCELACION_PROCESOS_BATCH........... 98
8 - SORT - Ordenacion básica .................................................................... 103
9 - SORT - Ordenacion parcial.................................................................... 104
10 - SORT - Copia de un fichero ................................................................. 105
11 - SORT - Copia parcial de un fichero...................................................... 106
4
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Figura 12 - SORT - Ordena y cambia disposicion de campos .................................. 107
Figura 13 - SORT - Eliminar repetidos................................................................... 108
Figura 14 - SORT - Acumular................................................................................ 109
5
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
1. MVS (MULTIPLE VIRTUAL STORAGE)
MVS (Multiple Virtual Storage, Múltiple Almacén Virtual en inglés) fue el sistema
operativo más usado en los modelos de mainframes System/370 y System/390 de
IBM. No tiene ninguna relación con VM/CMS, otro sistema operativo de IBM.
El MVS fue lanzado al mercado por primera vez en 1974, y luego fue renombrado a
MVS/XA (por arquitectura extendida en inglés), más tarde a MVS/ESA (por
arquitectura de sistemas empresariales), luego se renombró como OS/390 cuando se
le añadió al sistema operativo los servicios de UNIX, y finalmente a z/OS cuando los
modelos zSeries fueron introducidos al mercado. Todos ellos, sin embargo, son
fundamentalmente el mismo sistema operativo. De hecho, los programas que hayan
sido diseñados para el sistema MVS pueden correr en z/OS sin modificación alguna.
MVS fue creado basado en SVS (Single Virtual Storage, Único Almacén Virtual), y éste
a su vez fue creado a partir de MVT, una de las variantes del sistema operativo
OS/360.
La variante original del OS/360 era PCP (Programa de Control Primario) no soportaba
la ejecución de tareas múltiples, y MVT (Multitareas con número de Tareas Variables)
era una mejora que era capaz de la ejecución de múltiples tareas. Sobre esta base, el
sistema SVS añadió el “almacén virtual”, mejor conocido como memoria virtual; el
espacio de direccionamiento de esta memoria era compartido por todas las
aplicaciones.
MVS, finalmente, añadió la capacidad de que cada programa tuviera su propio espacio
de direccionamiento de memoria, de allí su nombre.
Este sistema se usa típicamente en aplicaciones comerciales y bancarias, y éstas son
normalmente escritas en COBOL. Normalmente estos programas escritos en COBOL
eran usados en sistemas transaccionales como IMS y CICS.
JCL (Job Control Language), la interfaz de proceso Batch.
TSO (Time Sharing Option), la interfaz interactiva de tiempo compartido.
ISPF Es una interfaz que permite al usuario lograr las mismas tareas que TSO pero
de una manera orientada a menús y formularios.
El sistema se usa normalmente en negocios y bancos, y las aplicaciones se suelen
escribir en COBOL. Los programas COBOL fueron tradicionalmente usados con
sistemas de procesamiento de transacciones como IMS YCICS. Para un programa
ejecutándose en CICS, se insertan las sentencias especiales EXEC CICS en el código
fuente COBOL. Un preprocesador replaza dichas sentencias EXEC CICS por el
apropiado código COBOL para llamar a CICS antes de que el programa se compile.
6
Software Factory
Cáceres –
2. ISPF (INTERACTIVE
FACILITY)
Rafael Campillo Lorenzo.
SYSTEM
PRODUCTIVITY
(Interfaz TSO/ISPF)
Es un conjunto herramienta para el sistema operativo IBM z/OS(MVS, OS/390) en los
ordenadores Mainframe.
Incluye un editor de pantalla, el interfaz de usuario fue comercializado a finales de los
años 80, incluyendo SPFPC.
Principalmente provee a la terminal IBM 3270 de un interfaz con menús y diálogos
para ejecutar herramientas de sistema bajo TSO. Frecuentemente es utilizado para
manipular archivos por medio de su PDF (Product Development Facility).
El ISPF es ampliable y muy a menudo es utilizado como interfaz para otros programas
de aplicación. Muchos productos vendidos para el sistema operativo MVS utilizan los
menús de ISPF para acceder a sus herramientas.
7
Software Factory
Cáceres –
3. CICS.
SYSTEM)
Rafael Campillo Lorenzo.
(CUSTOMER
INFORMATION
CONTROL
Figura 1 - Subsistemas del OS-390
CICS es un gestor de transacciones. La ejecución de un programa es una transacción,
y cada transacción genera una Tarea. Una Transacción es cada una de las entradas
que se realiza desde el Terminal. Una Tarea es la unidad de trabajo de CPU creada por
una transacción. Cuando se invoca una transacción, un programa determinado se
carga en memoria y se inicia la Tarea. Así aunque varios usuarios invoquen la misma
transacción, cada uno tendrá una tarea distinta.
CICS es multitarea (concurrencia). Además varias tareas diferentes pueden compartir
el mismo programa si este es reentrante (no cambia en ningún momento). CICS
permite compartir la Procedure Division de un programa y sin embargo acceder a
Working Storage Sections diferentes.
El CICS es el monitor de teleproceso. Es un producto que permite el tratamiento de
procesos en tiempo real, una interfase software para soportar nuestros programas de
aplicación en tiempo real entre los programas de aplicación y el sistema operativo. Se
podría pensar que el CICS es un Sistema Operativo dentro de otro Sistema Operativo.
En estos términos, CICS es un SO especializado cuya finalidad es proveer un entorno
para la ejecución de programas de aplicación ON LINE, incluyendo interfases para
ficheros y productos de Bases de Datos. El sistema total es conocido normalmente
como un sistema DB/DC (Data Base/Data Control)
El esquema del proceso en tiempo real puede ser el siguiente: Un operador, desde una
oficina, introduce algún dato por el Terminal; la información viaja por la línea
telefónica hasta el ordenador central; éste procesa la solicitud (por ejemplo una
petición de saldo) y envía la respuesta al Terminal que efectuó la petición. Un Monitor
de Teleproceso (CICS) junto a un adecuado Método de Acceso a Telecomunicaciones
(VTAM), permiten que este trasiego de información se efectúe de forma muy rápida y
eficaz.
En un sistema BATCH los recursos utilizados (principalmente ficheros) sólo están
disponibles cuando el programa ha acabado de usarlos, llegando así a estar accesibles
para cualquier petición.
Hay varios CICS: Para Desarrollo, Explotación, Test, Correo Electrónico.
8
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
4. CARACTERÍSTICAS DE LOS PROGRAMAS BAJO CICS.
BATCH VS ON LINE
Desde el punto de vista de la EJECUCIÓN:
•
Un programa BATCH se lanza ejecutándose de principio a fin sin que ningún
usuario pueda interferir en el proceso durante la ejecución.
•
Un programa ON-LINE permite interacciones con el usuario a través de un
Terminal. Además permite que un mismo programa sea ejecutado
simultáneamente por varios usuarios.
Desde el punto de vista de la utilización de MEMORIA:
•
Un programa BATCH mantiene reservado para su uso exclusivo todo el espacio
físico de memoria requerido por el programa durante todo el tiempo de
ejecución.
•
Sin embargo en un programa ON-LINE bajo CICS, es éste el que gestiona
dinámicamente la memoria, proporcionando áreas de memoria según las
necesidades del programa que en ese momento se están ejecutando.
Desde el punto de vista de utilización de FICHEROS,
•
Un programa BATCH hace un uso exclusivo de la información de los ficheros
que requiere debiendo ser definidos expresamente en el programa
•
Mientras que en un programa ON-LINE bajo CICS, se podrá acceder en todo
momento a la información de cualquier fichero que reconozca el CICS sin
requerir una definición expresa en el programa, pudiendo ser esto mismo
realizado por cualquier otro programa que también se esté ejecutando bajo
CICS.
Un programa BATCH envía sus instrucciones de E/S directamente al SO. Los
programas de aplicación del CICS envía tales instrucciones al CICS y éste maneja el
interfase con el Sistema Operativo.
Desarrollo de aplicaciones en HOST.
Teniendo la estación de trabajo conectada al HOST, bajo MVS y desarrollando las
aplicaciones bajo TSO
O bien funcionando de forma autónoma disponiendo de un CICS/OS2.
9
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
5. LA ARQUITECTURA DE DESARROLLO
Figura 2 - Arquitectura de desarrollo
Es una estructura que pretende facilitar el desarrollo de aplicaciones que deben
ejecutarse bajo COBOL/II, CICS y DB2.
Se compone de una serie de productos, programas, enganches con otras aplicaciones,
etc...
Esta infraestructura proporciona una rápida puesta en marcha de aplicaciones y
ahorro de tiempo en el mantenimiento.
Se puede ver como un conjunto de herramientas que para su estudio las agruparemos
en herramientas de manejo de datos, para el desarrollo ON-LINE y el desarrollo
BATCH.
Herramientas de Manejo de Datos.
Figura 3 - Herramientas de la arquitectura de desarrollo
10
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Diccionario de Datos: Se definen Entidades de las aplicaciones, así como los Atributos
que las componen, esto es, las tablas DB2 y sus campos. Permite relacionar atributos
de otras entidades y efectuar el mantenimiento de índices y vistas.
QMF: Es un producto mediante el cual se pueden emitir sentencias (en SQL) contra
Bases de Datos DB2 de forma interactiva.
SPUFI: También emite comandos SQL con la salvedad de que el proceso a realizar está
ya escrito en un fichero y permite usar sentencias de definición de datos
PROEDIT: Editor para tablas DB2 que permite procesar tablas DB2 fácil y
rápidamente pues es de apariencia similar al ISPF. Usando esta aplicación se pueden
modificar filas de las tablas sin conocimientos de SQL.
LIBRARIAN: Es un gestor de módulos fuentes, esto es, programas y copies que
mantiene hasta 10 versiones de un programa y 5 de una copy. Las copies del
programa deben ser pasadas a librarian antes que él para que la compilación de
cambio de entorno no falle.
Herramientas de desarrollo ON-LINE
Figura 4 - Herramientas de desarrollo ON-LINE
11
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
6. SQL. DB2. CURSORES.
DB2 es el sistema gestor de Bases de Datos de IBM. (Ha de permitir concurrencia,
seguridad (privilegios y prohibiciones) e integridad referencial, (coherencia dentro de la
BD)).
Clave Primaria (PRIMARY KEY): Si una columna está definida como clave primaria,
los datos de esa columna (campo) serán únicos. Es una columna o un conjunto de
columnas que identifican unívocamente a cada fila. Debe ser única, no nula y
obligatoria. Como máximo, podemos definir una clave primaria por tabla.
Esta clave se puede referenciar por una columna o columnas. Cuando se crea una
clave primaria, automáticamente se crea un índice que facilita el acceso a la tabla.
Clave Ajena, Externa (FOREING KEY): Esta formada por una o varias columnas que
están asociadas a una clave primaria de otra o de la misma tabla. Se pueden definir
tantas claves ajenas como se precise, y pueden estar o no en la misma tabla que la
clave primaria. El valor de la columna o columnas que son claves ajenas debe ser:
NULL o igual a un valor de la clave referenciada (regla de integridad referencial).
SQL: es un lenguaje declarativo. En cualquier BD trabajaremos con el lenguaje SQL.
DDL: Data Definition Language: CREATE, DROP, ALTER
DML: Data Manipulation Language: SELECT, INSERT, UPDATE, DELETE.
DCL: Data Control Language: …
CREATE
DATABASE
DROP
DATABASE
NombreDB
NombreDB
CREATE
TABLE
NombreTabla (Nom-campo
TipoDato
RestriccionNulidad, Nom-campo2 TipoDato2 RestricciónNulidad
…)
RESTRICCIÓN NULIDAD:
NOT NULL: si a un campo le especificamos NOT NULL, obligamos a que en ese campo
se meta información, no se puede quedar vacío.
NOT NULL WITH DEFAULT: No permite nulos, pero si se deja en blanco rellena. Con
esta opción podríamos dejar campos sin rellenar en la tabla.
NULLABLE:
defecto
DROP
que permite nulos ( en caso de no poner nada cogería esa opción por
TABLE
NombreTabla ( RESTRICT / CASCADE )
SELECT
Campo1, ... ,CampoN
INTO
:Var1, ... , :VarN
FROM Tabla
WHERE condiciones
GROUP BY Agrupaciones para sacar datos comunes
12
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
HAVING Filtro. Establece condiciones pero para grupos
ORDER BY Ordena
INSERT INTO Tabla
(Campo1, Campo2, … , CampoN)
VALUES
(Valor
UPDATE Tabla
SET
Campo1 = valor, … , CampoN = valor
WHERE …
DELETE FROM Tabla
WHERE …
Desde que nos conectamos hasta que ejecutemos ROLLBACK, El rollback recupera la
BD y la deja como estaba. Se usa en caso de error.
EXEC SQL
ROLLBACK
END-EXEC
El commit al contrario que Rollback, hace los cambios permanentes en las tablas.
Para evitar largos bloqueos de las tablas, las aplicaciones deben hacer confirmaciones
de los cambios realizados cada cierto número de registros (COMMIT), lo que liberará
los bloqueos existentes hasta ese momento.
Para ello, durante el proceso se harán confirmaciones periódicas de los datos
modificados (COMMIT), de forma que cuando el proceso falla en su ejecución, el DB2
se encarga de restablecer las tablas a su estado en la última confirmación,
deshaciendo todos los cambios no confirmados (ROLL BACK).
EXEC SQL
COMMIT
END-EXEC
6.1. Cursores
Hasta ahora solo se nos devolvía dentro de cobol una fila. Los cursores nos permitirán
trabajar con consultas de más de una fila. Declaración:
EXEC SQL
DECLARE Nombre-cursor
SELECT
WHERE Campo = var
END-EXEC
CURSOR FOR
PROCEDURE DIVISION
13
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
MOVE VALOR TO VAR
EXEC SQL
EXEC SQL
OPEN Nombre-cursor
CLOSE Nombre-cursor
END-EXEC
END-EXEC
Lectura:
EXEC SQL
FETCH Nombre-cursor
INTO :VAR
END-EXEC
Cambios dentro de las tablas:
WORKING STORAGE
EXEC SQL
DECLARE Nombre-cursor CURSOR FOR
SELECT …
FOR UPDATE OF Campo / s
END-EXEC
Si se hacen
declara.
actualizaciones en la tabla, hay que indicárselo al cursor cuando se
PROCEDURE DIVISION
EXEC SQL
UPDATE Tabla
SET Campo = :valor
WHERE CURRENT OF Nombre-cursor
END-EXEC
Sólo se puede modificar la última lectura, aunque el puntero apunte a la siguiente
El cursor nos devuelve la tabla virtual, y podemos trabajar sobre ella, pero la tratamos
como un fichero secuencial
6.2. Documentación para las pruebas de las tablas DB2 utilizadas
Aparte del documento de ciclos y de los ficheros de E/S, hay que presentar el
contenido de las tablas DB2 con las que hemos probado el programa.
Si nuestro programa hace algún tipo de modificación (insert, update o delete) sobre
estas tablas, tendremos que presentar el contenido de las mismas antes de realizar la
modificación y después de hacerla.
Por cada tabla tendremos que presentar un (dos si sufre modificación) fichero con
formato EXCEL que construimos de la siguiente forma:
Vamos a la ventana de mandatos (MS-DOS)
Exportamos la tabla que queremos presentar. Para ello ejecutamos el siguiente
comando:
DB2 EXPORT TO Destino OF WSF SELECT * FROM xxxx
14
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Donde: xxxx es el nombre de la tabla que queremos exportar. Y Destino es el lugar
donde vamos a dejar el fichero que contiene los datos de la tabla. El nombre que le
vamos a dar tendrá extensión wks.
Nos vamos a Excel y creamos un fichero nuevo. Abrimos desde Excel nuestro fichero
wks y seleccionamos todas las filas y las copiamos al fichero nuevo.
Ahora en ese fichero: FORMATO / COLUMNA / AUTOAJUSTAR SELECCIÓN
15
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
7. PROGRAMAS DE REARRANQUE Y
REPOSICIONAMIENTO. ARQUITECTURA BATCH.
Los grandes procesos Batch con gran número de actualizaciones DB2 plantean
problemas ya que mantienen durante largo tiempo bloqueos en las tablas modificadas,
impidiendo la concurrencia de otros procesos batch o del online. Por otra parte su
recuperación en caso de abend o de rearranque de todo el sistema es muy costosa ya
que el DB2 debe restaurar sus tablas a la situación inicial, bloqueando todas las
páginas que se hubieran utilizado.
Para evitar ambos problemas la aplicación debe estar preparada para efectuar
confirmaciones de los cambios (inserciones, borrado, modificaciones) cada cierto
número de actualizaciones (COMMIT).
De esta manera se liberaran los bloqueos adquiridos hasta ese momento y se
suavizará la recuperación del proceso.
Pero surge el problema del tratamiento de los objetos no DB2, tales como ficheros, ya
que el sistema no contempla de manera estándar su tratamiento.
Para esto se ha desarrollado una serie de utilidades que mediante la alocación
dinámica de ficheros sincroniza la actualización de ficheros secuenciales de salida con
la de objetos DB2.
7.1. Funcionamiento del DB2
El DB2 en caso de tener que hacer recuperación después de un error en ejecución de
programa, debe buscar en el Log propio del subsistema que contiene los datos de
cambios en Base de Datos y Puntos de Control del Sistema.
Para eliminar el problema de bloqueo, DB2 utiliza la sentencia COMMIT que libera
todos los recursos DB2 que el proceso estuviera utilizando (páginas, tablespaces,
índices, etc.). Por defecto cierra todos aquellos cursores que estuviesen abiertos y
considera definitivos todos los cambios realizados sobre las tablas.
Se llama unidad de recuperación (UR) a la secuencia de operaciones realizadas entre
dos puntos de COMMIT y hay que tener en cuenta que en caso de un ABEND el DB2
desharía todos los cambios realizados en la última UR, es decir, hasta el último
COMMIT.
El DB2 deshace los cambios no confirmados en caso de error (ROLL BACK), por ello,
para reposicionar los procesos que sólo actualizan datos en DB2, bastará con guardar
la última clave tratada y confirmada en los ficheros de entrada, para continuar desde
ella al rearrancar. Dicha clave se alamcena en una tabla de la arquitectura y se
recuperararía en un relanzamiento del programa para releer los ficheros de entrada o
las tablas hasta el último COMMIT realizado antes de que se interrumpiera la
ejecución.
Uno de los problemas es que no se contempla el reposicionamiento de objetos no DB2
tales como ficheros de salida; para ello la arquitectura ha generado herramientas para
su tratamiento.
7.2. Rearranque de programas
Se realizará rearranque cuando la ejecución se interrumpa de alguna manera (caída
de línea, de DB2, ABEND, etc.). Entonces el DB2 hará ROLLBACK (vuelta atrás
automática de los cambios realizados en las tablas en la última unidad de
recuperación, desde el último COMMIT).
7.3. Ficheros dinámicos para salida
Como se ha apuntado el DB2, automáticamente vuelve a la situación que existía en el
último punto de COMMIT, pero los objetos no DB2 no.
16
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Los ficheros de salida se han seguido generando y no podemos conocer cuales eran
sus datos antes. Por ello la arquitectura ha creado una serie de utilidades que
mediante la alocación dinámica de ficheros sincroniza la actualización de ficheros
secuenciales de salida con la de los objetos DB2.
El sistema, por cada uno de los ficheros de salida, que se han definido en una de las
tablas de trabajo, genera tantos ficheros dinámicos como procesos de COMMIT se
hayan realizado y posteriormente realizará una unión de todos ellos.
7.4. Soporte Físico
Como soporte a éste tratamiento y para hacerlo posible se utilizan dos tablas DB2,
varias rutinas para la alocación dinámica, diversos parámetros en el JCL de ejecución
de cada proceso y varios JCL's que enmarcan la ejecución de nuestros programas
batch.
En la arquitectura HOST de ISBAN Las aplicaciones guardarán toda la información
necesaria para reposicionar sus procesos Batch en caso de rearranque, en las tablas
DAREPOS y DAPROCBATCH pertenecientes a la arquitectura. (ver ANEXO3)
También se facilitan una serie de esqueletos de programas, así como copys con
campos estándar para la codificación de los mismos. (ver COPYS)
DCLGEN de las Tablas DB2.
D0204200 Dclgen de la tabla DAREPOS generada por Arquitectura.
D0204100 Dclgen de la tabla DAPROCBATCH generada por Arquitectura.
URDCLGEN Dclgen de la tabla DAREPOS que se usará en los programas.
INCLUDES a Utilizar en los Programas con Reposicionamiento.
URCOPYS Definición de las variables RURCOMM y RUROPER de comunicación
con la rutina UR0000.
URWORK Definición de las variables de trabajo para reposicionamiento.
URCURSOR Definición del cursor a utilizar en el programa con
reposicionamiento.
COPYS a Utilizar en los Programas con Reposicionamiento.
URSQLCOD Definición de la variable para controlar el SQLCODE de los
cursores de reposicionamiento.
MURSWITCH Definición de los SWITCHES utilizados por el programa con
Reposicionamiento.
URMENSA Definición de las variables de trabajo a utilizar para la cancelación.
7.5. Concatenación de Ficheros.
Se efectúa mediante el procedimiento URSORTX. Debe haber tantos JCL's de
concatenación como distintos ficheros de salida trate el proceso.
7.6. Borrado de Ficheros de COMMIT.
Una vez concatenados los ficheros y antes de volver a pasar el proceso se deben
borrar. Para ello existe un JCL que ejecuta una CLIST llamada URCLEAR, pasándole
como en el caso anterior, el nombre del plan, numero de registros por COMMIT,
proceso y prefijo de los ficheros.
17
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Esta CLIST ejecuta un plan que borra todos los ficheros y restaura el estado del
proceso a P sobre la tabla DAREPOS, estado que deja preparado el proceso para
ejecutarse.
Como en el caso anterior se crea y copia un fichero de PROFILE a fin de evitar
contenciones entre varios JCLs de éste tipo.
7.7. Borrado Ficheros Ultimo Commit.
En caso de tener que relanzar el proceso es necesario borrar los ficheros del COMMIT
que no llegó a efectuar. Para ello se ejecuta una CLIST llamada URCLEARU a la que
se le pasa como parámetros el nombre del plan, numero de registros del COMMIT,
proceso, prefijo de los ficheros y el subsistema DB2. Si no se ha alocado ningún
fichero la CLIST no hace nada, razón por la que se debe ejecutar siempre antes del
programa de reposicionamiento.
Si no se realiza éste paso la aplicación intentará alocar el fichero que ya existe, dando
un error
de catalogación NOT CATLG 2 y por consiguiente un ABEND del proceso.
Por otra parte si se varia alguna característica del fichero (como el tanto por ciento de
registros por COMMIT) al reutilizar el mismo fichero no se recogerá el cambio
efectuado con lo cual se repetirá el error anterior.
7.8. Ejemplos de JCL's.
Pueden consultarse en la libreria SIS.GRUR.REPOS. Hay distintos tipos según el
entorno de ejecución, ya que las CLIST y las librerías cambian.
En estos ejemplos aparecen con raya continua todas las variables que son propias del
proceso o del usuario que lo ejecuta. Muchos de estos parámetros están
interrelacionados.
Todos los JCL's deberán seguir las normas generales de la instalación, cómo por
ejemplo los nombres de los ficheros o los pasos a ejecutar.
(ver #JCLREPOS)
7.9. Esqueletos
Para facilitar la codificación de los programas se disponen de unos esqueletos en 5
modalidades distintas según utilicen ficheros secuenciales o tablas DB2, de entrada o
salida.
Dichos esqueletos son unas plantillas sobre las que se insertará la lógica de nuestro
programa. En ellos se controla todo el proceso de reposicionamiento y relanzamiento.
Se encuentran en la librería: SIS.GRUR.EJEMPLOS.
REPOSPS: Esqueleto de programa que efectúa reposicionamiento utilizando un fichero
secuencial de entrada y uno de salida. El plan debe llevar asociado la rutina
'UR0000'. REPOSPS.
En el programa no aparecerá la llamada a dicha rutina explícitamente ya que se
utilizará la variable RUR-CALL de la copy RUROPER para hacer llamadas dinámicas a
rutinas.
Entrada: Fichero secuencial.
Salida: Fichero secuencial.
Se emiten COMMIT's cada 10.000 registros tratados. Por cada COMMIT se cierra el
fichero de salida actual y se abre otro nuevo. Si se produce el ABEND, el fichero de
salida queda incompleto y con un contenido impredecible. Antes de rearrancar el
18
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
proceso debe borrase el último fichero utilizado porque se intentará crear de nuevo,
obteniendo un error de catálogo puesto que ya existe.
Al rearrancar, se relee el fichero de entrada a partir de los apuntadores guardados en
DAREPOS al hacer el último COMMIT, y se continúa grabando en el fichero de salida
correspondiente.
@-------¬
| START |
$-------%
10k
20k
30k
40k
50k
60k
FIC [ - - - -_- - - - -_- - - - -_- - - - -_- - - - -_- - - - -_- - .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
C
C
C
A
S [--------_---------_---------_-----_
X1
Z1
Z2
Z3
X2
X3
X4----]
C
A
X
Z
=
=
=
=
Punto de COMMIT
Punto de ABEND
Abre
fichero de salida
Cierra fichero de salida
@-------¬
|RESTART|
$-------%
Previo borrado del último fichero de COMMIT (4)
10k
20k
30k
40k
50k
60k
FIC [ - - - - - - - - - - - - - ->- - - - -_- - - - -_- - - - -_- - .
10k
20k
.
30k
.
.
.
.
.
.
.
.
.
.
.
.
R
C
C
F
S
_---------_---------_----_
X4
Z4
Z5
Z6
X5
X6
R
C
F
X
Z
=
=
=
=
=
Punto de RESTART
Punto de COMMIT
Punto de FINAL
Abre
fichero de salida
Cierra fichero de salida
7.10. Tratamiento a seguir por los programas de aplicación en base a
un ejemplo real. Programa LQBBN01.
Lo primero que se ha de hacer siempre que nos enfrentemos a la resolución de
programas de este tipo es identificar del tipo de programa: Se debe buscar el esqueleto
que más se ajuste al programa que se va a ejecutar.
A continuación se obtiene una copia del esqueleto pasando el esqueleto a nuestras
librerías, sin modificar lo directamente pues más adelante serán utilizados por otros
usuarios.
Durante la codificación hay que tener en cuenta que cada vez que se realiza un
COMMIT todos los cursores se cierran (aunque no se haya realizado CLOSE); por eso
si se ha abierto alguno que no pertenezca al reposicionamiento, hemos de recordar
abrirlo de nuevo.
Todos los switch que controlen el proceso deben guardarse (en la tabla DAREPOS)
porque si hay relanzamiento se debe saber qué parte del programa se debe ejecutar.
Si se utilizan tablas internas para validaciones, el primer paso al rearrancar, debe ser
cargarlas de nuevo. Se trata de reconstruir la situación al punto donde se quedó.
19
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Debe tenerse en cuenta que si se utilizan en el programa tablas internas en las que se
guarden acumuladores o datos intermedios, no se dispondrá de ellos en el momento
del relanzamiento. Entonces será necesario utilizar una tabla DB2 y trabajar con ella
de la misma forma que con los cursores de reposicionamiento. Podría ser utilizada la
tabla DAREPOS si el volumen de los datos lo permite.
¡¡Es importante decidir el criterio lógico de COMMIT, es decir, cada cuánto
tiempo se realiza un commit. Se puede establecer según el número de registros
leídos del fichero maestro, tratados o grabados en el fichero de salida, o según
el número de acceso a una tabla DB2, pero se ha de tener clara la lógica para
realizar el incremento del contador que nos dirá cuando efectuamos un
COMMIT..!! En el programa LQBBN01 se enfrentan dos ficheros de entrada, y
como lógica se ha decidido ir incrementando el contador en base alas lecturas
del fichero maestro.
Los programas Batch con reposicionamiento reciben como entrada los parámetros
necesarios para su control. No son parámetros de aplicación, si necesitase otros
parámetros para su proceso estos deberán pasarse al programa mediante ficheros de
entrada. Los parámetros para el control del reposicionamiento son:
PLAN Nombre del plan a ejecutar con reposicionamiento. Debería corresponder con el
propio.
NUMREG Número de registros que se van a procesar antes de cada confirmación.
Realmente no tiene porque indicar el número de registros de entrada: sólo es el tope
del contador del bucle de proceso de registros.
NUMPROC Número del proceso asociado a ese Job. Normalmente siempre es '1' salvo
el caso de programas que bifurcan y tratan tablas distintas según alguna entrada que
lean. En este caso se pueden lanzar dos o más Jobs en paralelo con el mismo
programa/plan pero distinto Número de Proceso para poder reposicionarse cada cual
correctamente e independientemente del otro Job.
PREFIX Prefijo de los ficheros de salida generados.
POOL Pool de discos. Este parámetro es opcional, si no se pone toma por defecto
SYSDA.
Ahora se han de preparar las tablas para la ejecución. Para ello se han de obtener y
modificar los JCL's correspondientes.
No debemos olvidar probar el proceso de relanzamiento una ver construído el
programa. Se deb cancelar una vez que se está ejecutando y volverlo a submitir.
(EJECUTAR).
****************************************************************************************
***
****************************************************************************************
***
*
*
*
*
*
*
*
*
*
*
PROGRAMA:
LQBBN01
FECHA CREACION: 07-11-2006
AUTOR: INSA
INSTALACION: CLIENTE.ISBAN.
DESCRIPCION: EL PROCESO DARÁ NUEVAS ALTAS EN LA TABLA DE SALDOS
VALOR PARA LIQUIDACIÓN DE CONTRADOS DE PRSTAMOS.(SALDO_VALOR_
20
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
* _PTM).
* A PARTIR DEL FICHERO DE ALTAS DEL DÍA(ALTAS1),ORDENADO POR
* CONTRATO, Y DEL FICHERO DE CONTRATOS QUE LIQUIDAN POR EL NUEVO
* SISTEMA(CONTBA3) ORDENADO POR CONTRATO, SELECCIONAMOS LAS ALTAS
* ENFRENTANDO AMBOS FICHEROS. CON CADA ALTA VÁLIDA(ENCONTRADA EN
* EL FICHERO DE CONTRATOS) GENERAMOS UN REGISTRO EN LA TABLA
* SALDO_VALOR_PTM CON EL SALDO A 0 POR CADA POSICIÓN LEÍDA EN EL
* FICHERO CONTBA3. LA PREESISTENCIA DEL REGISTRO QUE SE VA A DAR
* DE ALTA EN SALDO_VALOR_PTM IMPLICA UN ERROR, POR LO QUE SE
* GRABA EN EL FICHERO DE SALIDA DE ERRORES (ERRALTA)
*
****************************************************************************************
***
*
* RUTINAS:
*
RUTINA1: XX_CANCELACION_PROCESOS_BATCH:
*
*
CANCELAR LA EJECUCION DE UN PROGRAMA POR
*
CUALQUIER TIPO DE ERROR
*
*
RUTINA2: UR0000:
*
*
MUEVE LOS PARÁMETROS JCL A LA RURCOMM, Y
*
ACCEDE AL DB2
*
****************************************************************************************
**
*
* TABLAS:
*
TABLA1: SALDO_VALOR_PTM
*
*
SALDOS VALOR PARA LIQUIDACIÓN DE CONTRATOS
*
DE PRSTAMOS
*
****************************************************************************************
***
****************************************************************************************
***
*
* MODIFICACIONES
* ---------------*
* USUARIO
FECHA
DESCRIPCION
* --------------------------------* XXXXXXX
DD-MM-AA
XXXXXXXXXXXXXXXXXXXXXXX
*---------------------------------------------------------------****************************************************************************************
***
****************************************************************************************
***
**************************
IDENTIFICATION DIVISION.
**************************
PROGRAM-ID. LQBBN01.
AUTHOR. RAFITASUPERSTAR.
DATE-WRITTEN. 10/11/2006.
DATE-COMPILED. 13/11/2006.
*################################################################*
*#
#*
*#
ENVIRONMENT DIVISION
*#
#*
*################################################################*
**************************
ENVIRONMENT DIVISION.
**************************
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
21
Software Factory
Cáceres –
*
*
Rafael Campillo Lorenzo.
FICHERO DE CONTRATOS DE PRESTAMOS QUE LIQUIDAN POR EL NUEVO
SISTEMA. FICHERO SECUENCIAL DE ENTRADA1
SELECT CONTBA3 ASSIGN TO CONTBA3
FILE STATUS IS FS-CONTBA3.
* FICHERO CON LAS ALTAS DEL DÍA.FICHERO SECUENCIAL DE ENTRADA2
SELECT ALTAS1 ASSIGN TO ALTAS1
FILE STATUS IS FS-ALTAS1.
* FICHERO DONDE SE GRABAN LAS ALTAS NO PRODUCIDAS POR CLAVE
* DUPLICADA.FICHERO SECUENCIAL DE SALIDA.
SELECT ERRALTA ASSIGN TO ERRALTA
FILE STATUS IS FS-ERRALTA.
*################################################################*
*#
#*
*#
DATA DIVISION
#*
*#
#*
*################################################################*
***************************************************
DATA DIVISION.
***************************************************
FILE SECTION.
FD CONTBA3
LABEL RECORD ARE STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F.
01 REGCONTBA3 PIC X(280).
FD ALTAS1
LABEL RECORD ARE STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F.
01 REGALTAS1 PIC X(140).
FD ERRALTA
LABEL RECORD ARE STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F.
01 REGERRALTA PIC X(147).
***************************************************
WORKING-STORAGE SECTION.
***************************************************
****************************************************************************************
**
***
COPY DE MENSAJES DE ERROR PARA PROGRAMAS BATCH QUE
***
USEN
" REPOSICIONAMIENTO "
****************************************************************************************
**
COPY URMENSA.
****************************************************************************************
***
***
COPY QUE CONTIENE LOS " SWITCHES " UTILIZADOS
***
POR PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO.
****************************************************************************************
***
COPY URSWITCH.
****************************************************************************************
***
***
COPY QUE CONTIENE LOS CAMPOS DE TRABAJO UTILIZADOS
***
EN PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO.
****************************************************************************************
***
22
Software Factory
Cáceres –
EXEC SQL INCLUDE URWORK
Rafael Campillo Lorenzo.
END-EXEC.
****************************************************************************************
***
***
CLAVES DE RELANZAMIENTO Y DE REPOSICIÓN PARA EL
***
FICHERO CONTBA3 Y ALTAS1
En caso de que un programa vea cancelada su ejecución y tengamos que relanzarlo, tenemos
que releer el fichero maestro hasta el punto guardado tras el último COMMIT efectuado antes de
su caída. La cave guardada en ese último COMMIT será CLAVE-ALTAS1, que es la clave de
reposicionamiento, y la clave temporal que ser irá comparando con ésta en la relectura del
maestro, será UR-CLAVE-RELANZAMIENTO.
01
UR-CLAVE-RELANZAMIENTO.
10 IDEMPR-RELANZAMIENTO
10 IDCENT-RELANZAMIENTO
10 IDPROD-RELANZAMIENTO
10 IDCONTR-RELANZAMIENTO
PIC
PIC
PIC
PIC
X(4).
X(4).
X(3).
X(7).
* LA CLAVE DE REPOSICIONAMIENTO ES LA DEL FICHERO MAESTRO ALTAS1
01
01
CLAVE-ALTAS1.
10 IDEMPR-ALTAS1
10 IDCENT-ALTAS1
10 IDPROD-ALTAS1
10 IDCONTR-ALTAS1
PIC
PIC
PIC
PIC
X(4).
X(4).
X(3).
X(7).
CLAVE-CONTBA3.
10 IDEMPR-CONTBA3
10 IDCENT-CONTBA3
10 IDPROD-CONTBA3
10 IDCONTR-CONTBA3
PIC
PIC
PIC
PIC
X(4).
X(4).
X(3).
X(7).
****************************************************************************************
***
*--- ESTRUCTURA DE LQCBN02-TAB-SALDOS-VALOR:
01
TAB-SALDOS-VALOR-TRA.
02 REG-SALDOS-VALOR-TRA
05 ELE-SALDOS-VALOR-TRA
10 FEC-VALOR-TRA
10 DIAS-AVX-TRA
10 DIAS-AVB-TRA
10 SALDO-VALOR-TRA
OCCURS 2.
OCCURS 600.
PIC S9(8)
PIC S9(8)
PIC S9(3)
PIC S9(13)V9(2)
COMP-3.
COMP-3.
COMP-3.
COMP-3.
****************************************************************************************
***
***
INTRODUCIR AQUI LA COPY QUE CONTIENE LOS CAMPOS
***
DE LOS FICHEROS DE ENTRADA Y SALIDA
****************************************************************************************
***
* COPY DEL FICHERO DE ENTRADA CONTBA3 DE CONTRATOS DE PRESTAMOS
COPY LQYCONTL.
* COPY DEL FICHERO ALTAS1 CON LAS ALTAS DEL DÍA
COPY BNYDE008.
* COPY DEL FICHERO ERRALTA
COPY JWYARC01.
Añadir en el programa las COPYS e INCLUDES necesarias para el reposicionamiento.
****************************************************************************************
***
***
INCLUDES DE LA COPY PARA DB2
****************************************************************************************
***
EXEC SQL INCLUDE SQLCA END-EXEC.
23
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
****************************************************************************************
***
***
INCLUDE DE LAS COPYS PARA REPOSICIONAMIENTO
***
" RURCOMM "
Y
" RUROPER "
****************************************************************************************
***
*
EXEC SQL INCLUDE URCOPYS END-EXEC.
****************************************************************************************
***
***
INCLUDE DE LA COPY DE LA DCLGEN DE " DAREPOS ".
***
(TABLA UTILIZADA PARA EL REPOSICIONAMIENTO EN BATCH)
****************************************************************************************
***
*
EXEC SQL INCLUDE URDCLGEN END-EXEC.
****************************************************************************************
***
***
COPY QUE INCLUYE EL CURSOR FOR UPDATE DE DAREPOS.
***
TABLA UTILIZADA PARA EL REPOSICIONAMIENTO EN BATCH.
****************************************************************************************
***
*
EXEC SQL INCLUDE URCURSOR END-EXEC.
*-----------------------------------------------------------*
TABLA DE ACTUALIZACIÓN
SALDO_VALOR_PTM
*-----------------------------------------------------------EXEC SQL
INCLUDE D3445800
END-EXEC.
*-----------------------------------------------------------*
SWITCHES
*-----------------------------------------------------------01 SW-SWITCHES.
05 SW-FIN-ALTAS1
PIC 9(1).
88 SW-SI-FIN-ALTAS1
VALUE
1.
88 SW-NO-FIN-ALTAS1
VALUE
0.
05
SW-FIN-CONTBA3
88 SW-SI-FIN-CONTBA3
88 SW-NO-FIN-CONTBA3
PIC
9(1).
VALUE
VALUE
1.
0.
* PARA LOS CONTROLES DE DB2
05
SW-DB2-RETURN-CODE
PIC S9(04)
COMP VALUE ZEROES.
88 DB2-OK
VALUE 0.
88 DB2-CLV-NOT-FOUND
VALUE +100.
88 DB2-CLV-DUPLI-INSERT
VALUE -803.
88 DB2-CLV-DUPLI-SELECT
VALUE -811.
88 DB2-RECURSO-NO-DISPONIBLE
VALUE -911.
88 DB2-TABLA-BLOQUEADA
VALUE -904.
05 SW-LEER-ALTAS1
PIC 9(1).
88 SW-SI-LEE-ALTAS1
VALUE
1.
88 SW-NO-LEE-ALTAS1
VALUE
0.
*----------------------------------------------------------------*
*
CONSTANTES
*
*----------------------------------------------------------------*
01 CT-CONSTANTES.
05 CA-LQBBN01
PIC X(7)
VALUE 'LQBBN01'.
05 CA-PARRAFO-INICIO
PIC X(14)
VALUE 'PARRAFO-INI
'CIO'.
05 CA-PROGRAMA-LQBBN01
PIC X(30)
VALUE '
PROGRAMA
' LQBBN01'.
05 CA-ASTERISCO
PIC X(42)
VALUE '***********
'******************************'.
05 CA-RESPONSABLE
PIC X(26)
VALUE 'DESAROLLO-L
'IQUIDACIONES'.
05 CA-ALTAS1
PIC X(6)
VALUE 'ALTAS1'.
05 CA-CONTBA3
PIC X(7)
VALUE 'CONTBA3'.
24
Software Factory
Cáceres –
05
05
Rafael Campillo Lorenzo.
CA-ERRALTA
CA-ERROR-APERTURA
PIC X(7)
VALUE 'ERRALTA'.
PIC X(26)
VALUE 'ERROR AL AB
'RIR EL FICHERO'.
05 CA-ERROR-INSERT
PIC X(26)
VALUE 'ERROR AL HA
'CER EL INSERT'.
05 CA-ERROR-LECTURA
PIC X(26)
VALUE 'ERROR AL LE
'ER EL FICHERO'.
05 CA-ESCRIBIR-SALDO-PTM
PIC X(28)
VALUE 'ESCRIBIR SA
'LDO-VALOR-PTM'.
05 CA-SALDO-VALOR-PTM
PIC X(21)
VALUE 'SALDO-VALOR
'-PTM'.
05 CA-LEER-ALTAS1
PIC X(21)
VALUE 'LEER FICHER
'O ALTAS1'.
05 CA-LEER-CONTBA3
PIC X(22)
VALUE 'LEER FICHER
'O CONTBA3'.
05 CN-CERO
PIC 9(1)
VALUE 0.
05 CN-UNO
PIC 9(1)
VALUE 1.
05 CN-OCHO
PIC 9(1)
VALUE 8.
05 CN-DIECISIETE
PIC 9(2)
VALUE 17.
05 CN-DIECIOCHO
PIC 9(2)
VALUE 18.
05 CN-OCHENTA
PIC 9(2)
VALUE 80.
05 CA-TIPO-ERROR-F
PIC X(1)
VALUE 'F'.
05 CA-ESTADO-C
PIC X(1)
VALUE 'I'.
05 CA-ESTADO-I
PIC X(1)
VALUE 'P'.
05 CA-ESTADO-P
PIC X(1)
VALUE 'C'.
05 CA-ESTADO-F
PIC X(1)
VALUE 'F'.
05 CA-TIPO-ERROR-D
PIC X(1)
VALUE 'D'.
05 CA-COD-RETORNO
PIC X(4)
VALUE '3333'.
05 CA-FICH-OK
PIC X(2)
VALUE '00'.
05 CA-FIN-FICH
PIC X(2)
VALUE '10'.
05 CA-CODERROA
PIC X(4)
VALUE 'GL01'.
05 CA-CODCESTX
PIC X(3)
VALUE 'PTM'.
05 CA-AORIGEN
PIC X(3)
VALUE 'CSV'.
*-----------------------------------------------------------*
CAMPOS PARA LA FUNCIÓN DE ERRORES
*-----------------------------------------------------------01 WK-CANCELA.
05 WK-TIPO-ERROR
PIC X(001).
05 WK-COD-RETORNO
PIC X(004).
05 WK-DESCRIPCION
PIC X(080).
05 WK-RESPONSABLE
PIC X(030).
05 WK-PROGRAMA
PIC X(008) VALUE 'LQBBN01'.
05 WK-PARRAFO
PIC X(030).
05 WK-ERROR-DB2.
10 WK-SQLCA
PIC X(148).
10 WK-TABLA-DB2
PIC X(015).
10 WK-DATOS-ACCESO
PIC X(104).
05 WK-ERROR-RUTINA.
10 WK-RUTINA
PIC X(008).
10 WK-PARAMETROS
PIC X(114).
05 WK-ERROR-TABLA-MEMORIA.
10 WK-TABLA-MEM
PIC X(030).
10 WK-INDICE
PIC X(006).
10 WK-DATOS-TABMEM
PIC X(086).
05 WK-ERROR-FICHERO.
10 WK-DDNAME
PIC X(008).
10 WK-FILE-STATUS
PIC X(002).
10 WK-DATOS-REGISTRO
PIC X(112).
05 WK-EXISTENCIA-CONTRATO.
10 FILLER
PIC X(57)
VALUE 'YA EXISTE
'CONTRATO EN SALDO_VALOR_PTM PARA POSI
'CIÓN = '.
10 WK-TIPMVTO
PIC X(3)
VALUE SPACES.
05 WK-LECTURAS-CONTBA3.
10 FILLER
PIC X(42)
VALUE 'REGISTROS
'LEÍDOS EN EL FICHERO CONTBA3: '.
10 WK-CONT-CONTBA3
PIC 9(9)
VALUE ZEROS.
05 WK-LECTURAS-ALTAS1.
10 FILLER
PIC X(42)
VALUE 'REGISTROS
'LEÍDOS EN EL FICHERO ALTAS1: '.
10 WK-CONT-ALTAS1
PIC 9(9)
VALUE ZEROS.
05 WK-ESCRITURAS-ERRALTA.
10 FILLER
PIC X(46)
VALUE 'REGISTROS
'ESCRITOS EN EL FICHERO ERRALTA: '.
25
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
10 WK-CONT-ERRALTA
PIC 9(9)
VALUE ZEROS.
WK-ESCRITURAS-SALDO-VALOR-PTM.
10 FILLER
PIC X(57)
VALUE 'REGISTROS
'ESCRITOS EN LA TABLA SALDO_VALOR_PTM'
.
10 WK-CONT-SALDO-VALOR-PTM PIC 9(9)
VALUE ZEROS.
* PARÁMETROS PARA EL RESTO DE INCIDENCIAS SIN CATALOGAR(TIPO Q)
05 WK-ERROR-OTROS.
10 WK-RESTO-DATOS
PIC X(122).
01 IND-I
PIC 9(1).
05
01
01
FECAPER-NUM
FECAPER-COMP3
05 FECAPER-FECHA
PIC X(8).
REDEFINES FECAPER-NUM.
PIC 9(8).
*-----------------------------------------------------------*
DEFINICIÓN DE LOS CAMPOS DE LOS FICHEROS
*-----------------------------------------------------------01 CONT-CONTBA3
PIC 9(9) VALUE ZEROS.
01 CONT-ALTAS1
PIC 9(9) VALUE ZEROS.
01 CONT-SALDO-VALOR-PTM
PIC 9(9) VALUE ZEROS.
01 CONT-ERRALTA
PIC 9(9) VALUE ZEROS.
*--01
01
01
FILE STATUS
FS-CONTBA3
FS-ALTAS1
FS-ERRALTA
PIC X(2)
PIC X(2)
PIC X(2)
VALUE
VALUE
VALUE
'00'.
'00'.
'00'.
*-----------------------------------------------------------*
TABLAS INTERNAS
*-----------------------------------------------------------01 W-POSICION-ALTA
PIC X(03).
01 W-POSICIONES.
05 W-POSICION
OCCURS
8
PIC X(03).
******************
LINKAGE SECTION.
******************
En esta variable de linkage se recibirán los datos pasados en PARÁMETROS en el JCL
a través de la copy RURCOMM.
01
PARMLIST.
05 PARM-LNG
05 PARAMETRO
PIC
PIC
XX.
X(200).
************************************
PROCEDURE DIVISION USING PARMLIST.
************************************
********************************************
* RUTINA-PRINCIPAL.
********************************************
Algo que llamará la atención pero que no ha de asustarnos es el hecho de que se usen
dos inicios y dos finales en la rutina principal del programa. Esto tiene su sentido
porque utilizamos un inicio y un final del esqueleto que en el que se controlan temas
relacionados con el reposicionamiento. Esto no implica que la lógica de nuestro
programa encaje exactamente con A100-INICIO-PROGRAMA, A400-PROCESOPROGRAMA Y S900-FIN, ya que iremos entremezclando nuestra lógica con la del
esqueleto con lo que es necesario conocer qué hace el esqueleto para encajar nuestro
programa.
PERFORM
THRU
*----------PERFORM
THRU
S100-INICIO
S100-INICIO-EXIT.
A100-INICIO-PROGRAMA
A100-INICIO-PROGRAMA-EXIT.
PERFORM A400-PROCESO-PROGRAMA
THRU A400-PROCESO-PROGRAMA-EXIT.
PERFORM A900-FIN-PROGRAMA
THRU A900-FIN-PROGRAMA-EXIT.
26
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
*----------PERFORM S900-FIN
THRU S900-FIN-EXIT.
STOP RUN.
****************************************************************************************
**
***
***
S100-INICIO
***
****************************************************************************************
**
S100-INICIO.
*---------------------------------------------------------------*
*--INICIALIZAR VARIABLES DE PROCESO (COPY URSWITCH)
*---------------------------------------------------------------*
SET NO-HAY-ERROR-PROCESO TO TRUE.
SET NO-FIN-PROCESO
TO TRUE.
SET NO-RELANZAMIENTO
TO TRUE.
SET NO-FIN-DATOS
TO TRUE.
SET NO-ERROR
TO TRUE.
MOVE ZEROS
TO CA-COMMIT.
*---------------------------------------------------------------*
*--ACTUALIZACION DE DATOS DE RURCOMM CON LOS DATOS DE
*--PARAMETRO Y DAPROCBATCH.
*----------------------------------------------------------------*
Estos parámetros son pasados al programa por el JCL y recibidos en LINKAGE
(PARMLIST). Para obtenerlos se invoca la rutina UR0000 con RUR-INIT, ésta deja los
parámetros desglosados en subniveles de la variable RURCOMM.
Esta llamada inicial a la rutina UR0000 se tiene que hacer siempre, aunque el proceso
no tenga ficheros de salida.
La variable RUR-CALL ya contiene el nombre 'UR0000' y pertenece a una de las
Copys. El formato de la llamada puede ser uno de los siguientes:
EXEC-FUN UR_PARM PARMS(PARAMETROS) END-FUN
o
CALL RUR-CALL USING RUR-INIT RURCOMM PARAMETROS
Las variables obtenidas son:
CA-PLANNAME Nombre del plan.
CA-PROCESO Número de proceso.
CA-NUMREG Número de registros tratados en cada confirmación (COMMIT).
CA-PREF Prefijo de los ficheros, dependerá del subsistema donde se esté
ejecutando (DES: desarrollo, SIS: sistemas, EXP: explotación).
Cuando el proceso tiene ficheros de salida, esta llamada a la rutina sirve también para
recuperar sus datos, que se almacenarán la variable CA-DDNAMES de la copy
RURCOMM.
CALL RUR-CALL
MOVE
USING RUR-INIT RURCOMM PARAMETRO
CA-PROCESO
TO
UR-PROCESO
Antes de comenzar el tratamiento de los datos de entrada, se consultará en qué
estado se encuentra el proceso, para saber si es necesario reposicionar o por el
contrario se comienza el proceso desde el principio. Para ello se accede a la tabla
DAREPOS utilizando el cursor “REP”, proporcionado en la INCLUDE URCURSOR. Se
abrirá el cursor para el plan y el número de proceso pasados en los parámetros de
reposicionamiento y se recuperará una única fila.
EXEC SQL
OPEN REP
27
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
END-EXEC.
MOVE SQLCODE
TO SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-OPEN-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE.
EXEC SQL
FETCH REP INTO :RUR-PLANNAME,
:RUR-PROCES,
:RUR-ESTADO,
:RUR-NUMCOMM,
:RUR-PUNTEROS
END-EXEC.
*
MOVE SQLCODE TO SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
*---------------------------------------------------------------*
*--- "I" : ESTADO DE EJECUCIóN MEDIANTE ARSB (VIA ONLINE)
*--SE HA RESERVADO EL NUMERO DE PROCESO PARA LA
*--EJECUCION.
*---------------------------------------------------------------*
IF RUR-ESTADO = CA-ESTADO-I
MOVE SPACES TO UR-VALOR-REGISTRO-TEXT
MOVE 254 TO UR-VALOR-REGISTRO-LEN
MOVE ZEROES TO UR-CEROS
*--- ACTUALIZAR A ESTADO "C" Y GUARDAR PUNTEROS.
EXEC SQL
UPDATE DAREPOS
SET RUR_ESTADO = :CA-ESTADO-C,
RUR_NUMCOMM = :UR-CEROS,
RUR_PUNTEROS = :UR-VALOR-REGISTRO
WHERE CURRENT OF REP
END-EXEC
MOVE SQLCODE TO SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-UPDA-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
*--*--*--*---
REALIZAMOS COMMIT: Y ASÍ ACTUALIZAMOS LA TABLA DAREPOS.
SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA
COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE
CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES.
Antes de comenzar se debe hacer una primera confirmación (COMMIT) para liberar el
bloqueo sobre la tabla DAREPOS. Ésta no contabiliza en el proceso del número de
28
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
confirmaciones, de hecho, si no hay reposicionamiento, se ha inicializado a cero en la
tabla DAREPOS.
EXEC SQL COMMIT END-EXEC
MOVE SQLCODE
TO
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-COMM-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
MOVE ZEROES TO RUR-NUMCOMM
ELSE
*--------------------------------------------------------------------------------------*--"P" : IMPLICA QUE LOS FICHEROS RESULTANTES DEL
*--PROCESO HAN SIDO BORRADOS Y SE PUEDE EJECUTAR
*--DE NUEVO EL PLAN.
*---------------------------------------------------------------------------------------
Estado Inicial (P).
Un proceso está en estado inicial P cuando su última ejecución se completó
correctamente, sin ningún error. Implica que el proceso se encuentra en condiciones
de ser relanzado, los ficheros resultantes del último proceso han sido borrados y se
puede ejecutar de nuevo el plan. Si el programa de reposicionamiento comprueba que
el proceso se encuentra en estado inicial NO REPOSICIONARÁ SU ENTRADA, puesto
que debe comenzar el proceso desde el principio.
Si la consulta a la tabla DAREPOS indica que el proceso se encuentra en estado inicial
(P), se modificará para inicializar el número de validaciones a cero. Además se pondrá
el switch de reposicionamiento a “N”, para que el proceso comience desde el principio.
(SW-RELANZAMIENTO _ NO-RELANZAMIENTO).
IF RUR-ESTADO = CA-ESTADO-P
MOVE SPACES TO UR-VALOR-REGISTRO-TEXT
MOVE 254
TO UR-VALOR-REGISTRO-LEN
MOVE ZEROES TO UR-CEROS
*---
ACTUALIZAR A ESTADO "C" Y GUARDAR PUNTEROS.
EXEC SQL
UPDATE DAREPOS
SET RUR_ESTADO
RUR_NUMCOMM
RUR_PUNTEROS
WHERE CURRENT OF
END-EXEC
MOVE SQLCODE
TO
= :CA-ESTADO-C,
= :UR-CEROS,
= :UR-VALOR-REGISTRO
REP
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-UPDA-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
*--*---
REALIZAMOS COMMIT:
SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA
29
Software Factory
Cáceres –
*--*---
Rafael Campillo Lorenzo.
COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE
CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES.
EXEC SQL COMMIT END-EXEC
MOVE SQLCODE
TO
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-COMM-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
MOVE ZEROES TO RUR-NUMCOMM
ELSE
*--------------------------------------------------------------------------------------*--"C" : IMPLICA QUE SE ESTAN REALIZANDO COMMITS
* O QUE SE ES RELANZAMIENTO EN CASO DE NO SER LA PRIMERA VEZ
*---------------------------------------------------------------------------------------
Estado Intermedio (C).
Un proceso está en estado intermedio cuando durante su última ejecución acabó con un abend
o un error después de haber hecho una o varias confirmaciones (COMMIT).
Si el programa de reposicionamiento comprueba que el proceso se encuentra en estado
intermedio REPOSICIONARÁ SU ENTRADA, puesto que debe comenzar en el siguiente
registro de entrada al último confirmado.
Si la consulta a la tabla DAREPOS indica que el proceso se encuentra en estado
intermedio (C) será necesario reposicionarse antes de comenzar el tratamiento. Para
ello:
− Se mueve la información del puntero (RUR_PUNTEROS) a la variable utilizada para
el reposicionamiento: CLAVE-ALTAS1.
− Se recupera el número de validaciones realizadas (RUR_NUMCOMM).
− Se pone el switch de reposicionamiento a “S”, para que el proceso se reposicione
antes de comenzar el tratamiento. (SW-RELANZAMIENTO _ SI-RELANZAMIENTO).
IF RUR-ESTADO = CA-ESTADO-C
MOVE RUR-NUMCOMM TO CA-COMMIT
MOVE RUR-PUNTEROS-TEXT TO CLAVE-ALTAS1
SET SI-RELANZAMIENTO TO TRUE
EXEC SQL CLOSE REP END-EXEC
MOVE SQLCODE
TO
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-CLOSE-CUR')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
ELSE
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-ESTADO-DAR')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
30
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCA('SQLCA')
END-FUN
END-IF
END-IF
END-IF
WHEN DB2-CLV-NOT-FOUND
MOVE SPACES TO UR-VALOR-REGISTRO-TEXT
MOVE 254
TO UR-VALOR-REGISTRO-LEN
*---------------------------------------------------------------*
*--SI NO EXISTE EN DAREPOS SE CREA UNA ENTRADA
*--CON ESTADO "C" GUARDANDO PUNTEROS.
*---------------------------------------------------------------*
EXEC SQL
INSERT INTO DAREPOS
(RUR_PLANNAME,
RUR_PROCES,
RUR_ESTADO,
RUR_NUMCOMM,
RUR_PUNTEROS)
VALUES (:CA-PLANNAME,
:UR-PROCESO,
:CA-ESTADO-C,
:UR-CEROS,
:UR-VALOR-REGISTRO)
END-EXEC
MOVE SQLCODE
TO
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-INSERT-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
*--*--*--*---
REALIZAMOS COMMIT:
SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA
COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE
CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES.
EXEC SQL COMMIT END-EXEC
MOVE SQLCODE
TO
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-COMM-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
MOVE ZEROES TO RUR-NUMCOMM
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-FETCH-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-INICIO')
SQLCA('SQLCA')
31
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
END-FUN
END-EVALUATE.
S100-INICIO-EXIT.
EXIT.
****************************************************************************************
*********
*
*
A100-INICIO-PROGRAMA.
*
* SE INICIALIZAN TODAS LAS VARIABLES PARA CAMPOS DE LA FUNCIÓN
* DE ERRORES Y LOS CAMPOS DE ESTADÍSTICAS. ADEMÁS SE ABREN LOS
* FICHEROS CONTBA3 Y ALTAS1 EN MODO ENTRADA Y EL FICHERO ERRALTA
* EN MODO DE SALIDA, Y SE LEE EL PRIMER REGISTRO DE CONTBA3 Y
* ALTAS1.
*
****************************************************************************************
*********
A100-INICIO-PROGRAMA.
*---------------------------------------------------------------*
*--INICIALIZAR DCLGEN DE LAS TABLAS Y CAMPOS DE WORKING
*---------------------------------------------------------------*
INITIALIZE
DCLSALDO-VALOR-PTM
WK-ERROR-DB2
WK-ERROR-RUTINA
WK-ERROR-TABLA-MEMORIA
WK-ERROR-FICHERO
WK-ERROR-OTROS
CONT-CONTBA3
CONT-ALTAS1
CONT-ERRALTA
CONT-SALDO-VALOR-PTM
Para el caso de programas que utilizan ficheros de entrada (en nuestro caso CONTBA3
y el maestro: ALTAS1) tienen que controlar mediante un switch (SI-RELANZAMIENTO)
si es la primera vez que entra al programa o es relanzamiento porque haya abendado
anteriormente el proceso. En éste caso deberá leerse el fichero desde el principio hasta
el registro grabado en DAREPOS correspondiente al último COMMIT.
*---------------------------------------------------------------*
*--SE ABREN LOS FICHEROS
*---------------------------------------------------------------*
PERFORM A150-ABRIR-FICHEROS
THRU A150-ABRIR-FICHEROS-EXIT
*---------------------------------------------------------------*
*--- SI ENTRA AL PROGRAMA POR RELANZAMIENTO PORQUE HAYA
*--- CASCADO EL PROCESO, DEBE LEERSE EL FICHERO DE ENTRADA
*--- DESDE EL PRINCIPIO HASTA EL ULTIMO REGISTRO GRABADO
*--- EN EL ULTIMO COMMIT, GRABADO EN "DAREPOS".
*---------------------------------------------------------------*
IF SI-RELANZAMIENTO
PERFORM A110-RELEER-FICH-ENTRADA THRU
A110-RELEER-FICH-ENTRADA-EXIT
UNTIL FIN-DATOS
*---------------------------------------------------------------*
*--ENTRA A LEER LOS FICHEROS DE ENTRADA POR PRIMERA VEZ
*---------------------------------------------------------------*
ELSE
MOVE LOW-VALUE
TO
CLAVE-ALTAS1
CLAVE-CONTBA3
PERFORM
THRU
9100-LEER-FICH-ALTAS1
9100-LEER-FICH-ALTAS1-EXIT
PERFORM 9200-LEER-FICH-CONTBA3
THRU 9200-LEER-FICH-CONTBA3-EXIT
END-IF.
32
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
A100-INICIO-PROGRAMA-EXIT.
EXIT.
*************************************************************
***
***
A110-RELEER-FICH-ENTRADA
***
*************************************************************
A110-RELEER-FICH-ENTRADA.
IF NO-FIN-PROCESO AND NO-FIN-DATOS
READ ALTAS1 INTO BNYDE008
AT END
SET FIN-DATOS
TO TRUE
SET SW-SI-FIN-CONTBA3 TO TRUE
SET FIN-PROCESO
TO TRUE
MOVE HIGH-VALUES
TO CLAVE-ALTAS1
NOT AT END
SET SW-NO-FIN-ALTAS1
TO TRUE
*--- MOVER LOS CAMPOS DEL REGISTRO AL CAMPO WORKING
*--- UR-CLAVE-RELANZAMIENTO.
MOVE BNYDE008-IDEMPR
TO IDEMPR-RELANZAMIENTO
MOVE BNYDE008-IDCENT
TO IDCENT-RELANZAMIENTO
MOVE BNYDE008-IDPROD
TO IDPROD-RELANZAMIENTO
MOVE BNYDE008-IDCONTRN TO IDCONTR-RELANZAMIENTO
END-READ
IF FS-ALTAS1
NOT EQUAL CA-FICH-OK AND
NOT EQUAL CA-FIN-FICH
MOVE CA-PARRAFO-INICIO TO WK-PARRAFO
MOVE CA-ALTAS1
TO WK-DDNAME
MOVE FS-ALTAS1
TO WK-FILE-STATUS
MOVE CA-ERROR-APERTURA TO WK-DESCRIPCION
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF
END-IF
*--- EL REGISTRO LEIDO ES MAYOR AL ULTIMO LEIDO ANTES DE
*--- CASCAR EL PROGRAMA, QUE ESTA GRABADO EN 'DAREPOS'.
IF UR-CLAVE-RELANZAMIENTO > CLAVE-ALTAS1
Hemos de tener en cuenta que hay que actualizar la clave de reposicionamiento
CLAVE-ALTAS1 a la siguiente, porque el registro almacenado en ella ya ha sido
procesado, y se ha de continuar por el siguiente.
MOVE
UR-CLAVE-RELANZAMIENTO TO
CLAVE-ALTAS1
SET FIN-DATOS TO TRUE
END-IF.
***
A110-RELEER-FICH-ENTRADA-EXIT.
EXIT.
**************************************************************************************
* A150-ABRIR-FICHEROS.
*
* SE ABREN LOS FICHEROS CONTBA3 Y ALTAS1 EN MODO ENTRADA Y EL
* FICHERO ERRALTA EN MODO DE SALIDA Y SE COMPRUEBA QUE SE HA
* REALIZADO LA OPERACIÓN CORRECTAMENTE. EN CASO CONTRARIO SE
* LLAMA AL PÁRRAFO 9300-ERROR-FICHERO
*
**************************************************************************************
A150-ABRIR-FICHEROS.
OPEN INPUT CONTBA3
ALTAS1
IF
FS-CONTBA3
MOVE CA-PARRAFO-INICIO
MOVE CA-CONTBA3
MOVE FS-CONTBA3
MOVE CA-ERROR-APERTURA
NOT EQUAL CA-FICH-OK
TO WK-PARRAFO
TO WK-DDNAME
TO WK-FILE-STATUS
TO WK-DESCRIPCION
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF
33
Software Factory
Cáceres –
IF
FS-ALTAS1
MOVE CA-PARRAFO-INICIO
MOVE CA-ALTAS1
MOVE FS-ALTAS1
MOVE CA-ERROR-APERTURA
Rafael Campillo Lorenzo.
NOT EQUAL CA-FICH-OK
TO WK-PARRAFO
TO WK-DDNAME
TO WK-FILE-STATUS
TO WK-DESCRIPCION
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF.
A150-ABRIR-FICHEROS-EXIT.
EXIT.
****************************************************************************************
**
* A400-PROCESO-PROGRAMA.
*
* PROCESO PRINCIPAL DEL PROGRAMA. SE REALIZARÁ UN PROCESO CONTÍNUO
* EN EL QUE SÓLO SE SALDRÁ CUANDO SE LLEGUE AL FINAL DEL FICHERO
* DE ALTAS1 OR CONTBA3, O SE DETECTE ALGÚN ERROR MENCIONADO A
* CONTINUACIÓN QUE INDIQUE EL FINAL DEL PROGRAMA
*
**************************************************************************************
A400-PROCESO-PROGRAMA.
Se van alocando los ficheros de salida dinámicamente por cada commit que se realiza.
PERFORM S400-PROCESO-COMMIT
THRU S400-PROCESO-COMMIT-EXIT
UNTIL FIN-PROCESO OR SI-ERROR.
El programa contendrá, después de su inicio, un bucle externo y otro interno. El bucle
externo, se repetirá hasta que no haya más datos de entrada (SW-FIN-DATOS) o hasta
que ocurra un error.
A400-PROCESO-PROGRAMA-EXIT.
EXIT.
*********************************************************************
***
***
S400-PROCESO-COMMIT
***
*********************************************************************
S400-PROCESO-COMMIT.
En este bucle externo se incluirán las siguientes tareas, además de las propias de la
aplicación.
Ext. 1. Iniciación del contador de registros procesados a 1.
Ext. 2. Alocación de los ficheros de salida, si existen en el proceso.
Se hará una llamada a la rutina UR0000 con el parámetro RUR-NEW para alocar los
ficheros de salida. Formato:
CALL RUR-CALL USING RUR-NEW RURCOMM DCLDAREPOS
La rutina UR0000 llamada de ésta manera construirá el nombre del fichero
correspondiente para cada DDNAME y número de confirmación, alocando
dinámicamente cada uno de ellos. Si durante este proceso se produjese algún error
aparecerá reflejado en el fichero de mensajes (RURMSG) y el JOB se cancelará. Así
mismo por cada fichero alocado se enviará un mensaje informativo (UR0015).
El nombre de los ficheros es distinto por cada COMMIT y se compone de:
XXX.DDDDDDDD.PPPPPPPP.RnnVnnnn
Donde XXX es el prefijo. Parámetro del JCL.
DDDDDDDD es el nombre de la dd del fichero, información contenida en la tabla
DAPROCBATCH.
PPPPPPPP es el nombre del plan. Parámetro del JCL.
34
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Rnn. Número del proceso. Parámetro del JCL.
Vnnnn. Número del COMMIT al que corresponde. Por lo tanto al final del proceso
habrá tantos ficheros por ddname definida en DAPROCBATCH como COMMITS se
hayan hecho.
No necesitan hacer ésta llamada los programas que no utilizan ficheros secuénciales de
salida.
Ext. 3. Abrir los ficheros de salida, si existen en el proceso.
Bucle Interior.
Procesa todos los registros de entrada entre validaciones, hasta que el contador
de registros procesados alcanza el valor de CA-NUMREG (parámetro
introducido en el JCL), se acaban los datos de entrada o hay algún error.
Int. 1. Lectura del siguiente dato de entrada.
Int. 2. Proceso propio de la aplicación. Instrucciones para el
tratamiento de los datos de entrada.
Int. 3. Actualización del contador de registros tratados.
Suma uno al contador de registros tratados.
Ext. 4. Cerrar los ficheros de salida, si los hay.
Ext. 5. Validar las modificaciones DB2.
Se hace COMMIT.
Ext. 6. SI NO HAY FICHEROS DE SALIDA, sumar 1 al número de validaciones
(CACOMMIT)
Sólo si no hay ficheros de salida, se debe sumar 1 al número de validaciones, variable
CA-COMMIT proporcionada por los parámetros del JCL. En caso de que existan
ficheros de salida NO se debe actualizar el número de validaciones, por que lo hace la
rutina UR0000 y si se vuelve a hacer en el programa provocará errores.
Ext. 7. Sólo si hay ficheros de salida, actualizar el número de validaciones y el
puntero en DAREPOS.
Actualiza la fila de la tabla DAREPOS correspondiente a este plan/proceso sumando
uno al número de validaciones y anotando en el puntero la última clave de entrada
tratada correctamente. El plan/proceso con el que estamos trabajando son datos que
se leyeron de los parámetros del JCL al principio del programa, en el paso I. 2.
*--------------------------------------------------------------------------------------*--REALIZA UNA LLAMADA DINAMICA A LA COPY DE RURCOMM
*--PARA MONTAR EL NOMBRE DEL FICHERO Y ALOCARLO
*--------------------------------------------------------------------------------------* RUR-NEW: LA RUTINA UR0000 LLAMADA DE ESTA MANERA POR EL PROG
* DE APLICACIÓN CONSTRUIRÁ EL NOMBRE DE FICHERO CORRESPONDIENTE
* PARA CADA DDNAME Y NÚMERO DE COMMIT, ALOCANDO DINÁMICAMENTE
* CADA UNO DE ELLOS. ESTA RUTINA A SU VEZ LLAMA A OTRAS RUTINAS
* ENSAMBLADOR. EL NOMBRE DE LOS FICHEROS ES DISTINTO POR CADA
* COMMIT.
CALL RUR-CALL
USING RUR-NEW RURCOMM DCLDAREPOS.
*--------------------------------------------------------------------------------------*--ABRIMOS EL FICHERO DE SALIDA PARA EL REPOSICIONAMIENTO.
*--------------------------------------------------------------------------------------OPEN OUTPUT ERRALTA.
IF
FS-ERRALTA
MOVE CA-PARRAFO-INICIO
MOVE CA-ERRALTA
MOVE FS-ERRALTA
MOVE CA-ERROR-APERTURA
NOT
TO
TO
TO
TO
EQUAL CA-FICH-OK
WK-PARRAFO
WK-DDNAME
WK-FILE-STATUS
WK-DESCRIPCION
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF
*--------------------------------------------------------------------------------------*--- INICIALIZA CONTADOR DE REGISTROS A 1
*---------------------------------------------------------------------------------------
35
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
MOVE CN-UNO
PERFORM
THRU
UNTIL
TO
UR-CONT-REG
S410-UNIDAD-COMMIT
S410-UNIDAD-COMMIT-EXIT
UR-CONT-REG GREATER CA-NUMREG OR
FIN-PROCESO OR
SI-ERROR
*--------------------------------------------------------------------------------------*--CERRAR FICHERO SALIDA ERRALTA
*--------------------------------------------------------------------------------------CLOSE
IF
ERRALTA
FS-ERRALTA
NOT EQUAL
CA-FICH-OK
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF
*--------------------------------------------------------------------------------------*--ACTUALIZAR NUMERO DE COMMITS Y PUNTEROS EN DAREPOS.
*--------------------------------------------------------------------------------------MOVE
MOVE
CA-COMMIT
CA-PROCESO
TO
TO
UR-COMMIT
UR-PROCESO
*--------------------------------------------------------------------------------------*--- MOVER LOS CAMPOS CLAVE DEL FICHERO A LOS CAMPOS DE WORKING
*--- PARA REPOSICIONAMIENTO: UR-CLAVE-REPOSIC.
*--------------------------------------------------------------------------------------MOVE CLAVE-ALTAS1
MOVE CN-DIECIOCHO
TO
TO
UR-VALOR-REGISTRO-TEXT
UR-VALOR-REGISTRO-LEN
*
EXEC SQL
UPDATE DAREPOS
SET
RUR_NUMCOMM
RUR_PUNTEROS
WHERE RUR_PLANNAME
AND
RUR_PROCES
END-EXEC.
MOVE SQLCODE
TO
= :UR-COMMIT,
= :UR-VALOR-REGISTRO
= :CA-PLANNAME
= :UR-PROCESO
SW-DB2-RETURN-CODE
EVALUATE
WHEN
WHEN
EXEC-FUN
TRUE
DB2-OK
CONTINUE
OTHER
XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-UPDA-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-PROC-COMM')
SQLCA('SQLCA')
END-FUN
END-EVALUATE.
*--------------------------------------------------------------------------------------*--- REALIZAMOS COMMIT:
*--- SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA
*--- COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE
*--- CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES.
*--------------------------------------------------------------------------------------EXEC SQL COMMIT END-EXEC.
MOVE SQLCODE
TO
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-PROC-COMM')
36
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-PROC-COMM')
SQLCA('SQLCA')
END-FUN
END-EVALUATE
*--------------------------------------------------------------------------------------*--- SI NO HAY ERROR VUELVE A LEER EL FICHERO DE ENTRADA
*--------------------------------------------------------------------------------------IF SI-ERROR OR FIN-PROCESO
CONTINUE
ELSE
PERFORM 9100-LEER-FICH-ALTAS1
THRU 9100-LEER-FICH-ALTAS1-EXIT.
***
S400-PROCESO-COMMIT-EXIT.
EXIT.
****************************************************************
***
***
S410-UNIDAD-COMMIT
***
****************************************************************
S410-UNIDAD-COMMIT.
*--- AQUÍ COMIENZA LA LÓGICA DEL PROGRAMA.
Este sería el párrafo proceso utilizado en nuestro programa. Enfrentamos el fichero
maestro ALTAS1 con el fichero CONTBA3.
IF
CLAVE-ALTAS1
LESS THAN
CLAVE-CONTBA3
SET SW-SI-LEE-ALTAS1
TO TRUE
CONTINUE
ELSE
IF
CLAVE-ALTAS1
EQUAL
SET SW-SI-LEE-ALTAS1
CLAVE-CONTBA3
TO
TRUE
PERFORM
THRU
2100-PARRAFO-ALTAS
2100-PARRAFO-ALTAS-EXIT
PERFORM
THRU
9200-LEER-FICH-CONTBA3
9200-LEER-FICH-CONTBA3-EXIT
ELSE
SET SW-NO-LEE-ALTAS1
PERFORM
THRU
TO
TRUE
9200-LEER-FICH-CONTBA3
9200-LEER-FICH-CONTBA3-EXIT
UNTIL (CLAVE-ALTAS1 LESS THAN CLAVE-CONTBA3) OR
(CLAVE-ALTAS1 EQUAL CLAVE-CONTBA3)
END-IF
END-IF
*---
AQUÍ TERMINA LA LÓGICA DEL PROGRAMA
(Ver #ANEXO4)
ADD CN-UNO
TO
UR-CONT-REG
*------------------------------------------------------------------------------------------------*
*--- CUANDO EL CONTADOR DE REGISTROS SEA MAYOR AL CAMPO CA-NUMREG
*--- DE "RURCOMM" : CIERRA EL FICHERO, HACE COMMIT Y ACTUALIZA DAREPOS.
*------------------------------------------------------------------------------------------------*
IF
UR-CONT-REG
CONTINUE
GREATER
THAN
CA-NUMREG
ELSE
IF
SW-SI-LEE-ALTAS1
PERFORM 9100-LEER-FICH-ALTAS1
37
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
THRU 9100-LEER-FICH-ALTAS1-EXIT
END-IF
END-IF.
S410-UNIDAD-COMMIT-EXIT.
EXIT.
*************************************************************
***
***
A900-FIN-PROGRAMA
***
*************************************************************
A900-FIN-PROGRAMA.
*---------------------------------------------------------------*
*--CERRAR FICHEROS DE ENTRADA
*---------------------------------------------------------------*
PERFORM 3100-CERRAR-FICHEROS
THRU 3100-CERRAR-FICHEROS-EXIT
PERFORM 9500-ESTADISTICAS
THRU 9500-ESTADISTICAS-EXIT.
A900-FIN-PROGRAMA-EXIT.
EXIT.
*******************************************************************
***
***
S900-FIN
***
*******************************************************************
S900-FIN.
Estado Final (F)
Un proceso se encuentra en estado final cuando después de su última ejecución
correcta AÚN NO SE HAN FUSIONADO SUS FICHEROS DE SALIDA.
Si el programa de reposicionamiento comprueba que el proceso se encuentra en
estado final DEBE TERMINAR sin procesar ningún dato. Puesto que los ficheros de
salida definitivos aún no se han creado. En este caso debería arrancarse el JCL desde
el paso posterior al programa con reposicionamiento, que fusionará los juegos de
ficheros creados por el programa en los ficheros de salida definitivos.
*------------------------------------------------------------------------------------------------*
*--ACTUALIZA DAREPOS CON EL ESTADO IGUAL A "F".
*--"F" : IMPLICA PROCESO FINALIZADO O PENDIENTE
*--DE UTILIDADES
*------------------------------------------------------------------------------------------------*
EXEC SQL
UPDATE DAREPOS
SET
RUR_ESTADO
WHERE RUR_PLANNAME
AND
RUR_PROCES
END-EXEC.
MOVE SQLCODE
= :CA-ESTADO-F
= :CA-PLANNAME
= :UR-PROCESO
TO
SW-DB2-RETURN-CODE
EVALUATE TRUE
WHEN DB2-OK
CONTINUE
WHEN OTHER
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('UR-MSG-TIPO-ERROR')
DESCRIPCION('UR-MSG-UPDA-REP')
PROGRAMA('CA-LQBBN01')
PARRAFO('UR-MSG-FIN')
SQLCA('SQLCA')
END-FUN
38
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
END-EVALUATE.
GOBACK.
***
S900-FIN-EXIT.
EXIT.
**************************************************************************************
* 2100-PARRAFO-ALTAS
*
* POR CADA POSICIÓN SE HA DE DAR UN ALTA EN LA TABLA SALDO_VALOR
* _PTM, COM EL CAMPO POSICIONES LQYCONTL-OSICIONES ES DE 24
* CARACTERES Y CADA POSICIÓN ESTÁ DEFINIDA CON 3 CARACTERES,COMO
* MÁXIMO SERÁN 8 LAS POSICIONES QUE SE PODRÁN DAR DE ALTA
**************************************************************************************
2100-PARRAFO-ALTAS.
MOVE
MOVE
LQYCONTL-POSICIONES
CN-UNO
PERFORM
THRU
UNTIL
OR
TO
TO
2150-POSICIONES
2150-POSICIONES-EXIT
IND-I GREATER
THAN
W-POSICION(IND-I) EQUAL
W-POSICIONES
IND-I
CN-OCHO
SPACES.
2100-PARRAFO-ALTAS-EXIT.
EXIT.
*************************************************************************************
* 2150-POSICIONES
*
* COMO MÁXIMO SE DAN DE ALTA 8 POSICIONES EN LA TABLA
* SALDO_VALOR_PTM
*************************************************************************************
2150-POSICIONES.
MOVE W-POSICION(IND-I)
TO
W-POSICION-ALTA
PERFORM 2200-ESCR-SALDO-V-PTM
THRU 2200-ESCR-SALDO-V-PTM-EXIT
ADD
1
TO
IND-I.
2150-POSICIONES-EXIT.
**************************************************************************************
* 2200-ESCR-SALDO-V-PTM
*
* SE ESCRIBE EN LA TABLA SALDO_VALOR_PTM UN REGISTRO CON EL
* SALDO A 0 POR CADA POSICIÓN LEÍDA EN EL FICHERO CONTBA3
**************************************************************************************
2200-ESCR-SALDO-V-PTM.
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
LQYCONTL-IDCENT
LQYCONTL-IDPROD
LQYCONTL-IDCONTR
W-POSICION-ALTA
LQYCONTL-CODMONBE
CN-UNO
LQYCONTL-IDSTIPRO
LQYCONTL-COESTREF
BNYDE008-FECAPER
CN-CERO
TO
TO
TO
TO
TO
TO
TO
TO
TO
TO
E4294-IDCENT
E4294-IDPROD
E4294-IDCONTR
E4294-TIPMVTO
E4294-CODMONSW
E4294-NUMERSEC
E4294-IDSTIPRO
E4294-COESTREF
E4294-FHSALV
E4294-SALDCTA
MOVE
MOVE
MOVE
MOVE
BNYDE008-FECAPER(1:4)
BNYDE008-FECAPER(6:2)
BNYDE008-FECAPER(9:2)
FECAPER-FECHA
TO
TO
TO
TO
FECAPER-NUM(1:4)
FECAPER-NUM(5:2)
FECAPER-NUM(7:2)
FEC-VALOR-TRA(1, 1)
MOVE
MOVE
MOVE
MOVE
MOVE
CN-CERO
CN-CERO
CN-CERO
CN-DIECISIETE
REG-SALDOS-VALOR-TRA(1)
TO
TO
TO
TO
TO
DIAS-AVX-TRA(1, 1)
DIAS-AVB-TRA(1, 1)
SALDO-VALOR-TRA(1, 1)
E4294-IMPSALV-LEN
E4294-IMPSALV-TEXT
*---
39
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
*--MOVE LQYCONTL-IDEMPR
TO
E4294-IDEMPR
EXEC SQL
INSERT INTO SALDO_VALOR_PTM
(E4294_IDCENT,
E4294_IDPROD,
E4294_IDCONTR,
E4294_TIPMVTO,
E4294_CODMONSW,
E4294_NUMERSEC,
E4294_IDSTIPRO,
E4294_COESTREF,
E4294_FHSALV,
E4294_SALDCTA,
E4294_IMPSALV,
E4294_IDEMPR)
VALUES
(:E4294-IDCENT,
:E4294-IDPROD,
:E4294-IDCONTR,
:E4294-TIPMVTO,
:E4294-CODMONSW,
:E4294-NUMERSEC,
:E4294-IDSTIPRO,
:E4294-COESTREF,
:E4294-FHSALV,
:E4294-SALDCTA,
:E4294-IMPSALV,
:E4294-IDEMPR)
END-EXEC
MOVE
*
SQLCODE
EVALUATE TRUE
WHEN DB2-OK
ACUMULAR PARA ESTADISTICAS
ADD CN-UNO
TO
SW-DB2-RETURN-CODE
TO
CONT-SALDO-VALOR-PTM
WHEN DB2-CLV-DUPLI-INSERT
PERFORM 2300-ESCR-ERR-ALTA
THRU 2300-ESCR-ERR-ALTA-EXIT
WHEN OTHER
MOVE CA-ERROR-INSERT
MOVE CA-ESCRIBIR-SALDO-PTM
MOVE CA-SALDO-VALOR-PTM
MOVE DCLSALDO-VALOR-PTM
TO
TO
TO
TO
WK-DESCRIPCION
WK-PARRAFO
WK-TABLA-DB2
WK-DATOS-ACCESO
PERFORM 9400-ERROR-DB2
THRU 9400-ERROR-DB2-EXIT
END-EVALUATE.
2200-ESCR-SALDO-V-PTM-EXIT.
EXIT.
**************************************************************************************
* 2300-ESCR-ERR-ALTA
*
* LA PREEXISTENCIA DEL REGISTRO QUE SE VA A DAR DE ALTA EN
* SALDO_VALOR_PTM IMPLICA UN ERROR, POR LO QUE SE GRABA EN EL
* FICHERO DE SALIDA DE ERRORES (ERRALTA)
**************************************************************************************
2300-ESCR-ERR-ALTA.
* ACUMULAR PARA ESTADÍSTICAS
ADD
CN-UNO
INITIALIZE W-COPY-TABLA
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
E4294-IDEMPR
E4294-IDCENT
E4294-IDPROD
E4294-IDCONTR
CA-CODERROA
E4294-IDSTIPRO
TO
CONT-ERRALTA
TO
TO
TO
TO
TO
TO
W-COPY-IDEMPR
W-COPY-IDCENT
W-COPY-IDPROD
W-COPY-IDCONTR
W-COPY-CODERROA
W-COPY-IDSTIPRO
40
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
MOVE E4294-COESTREF
MOVE E4294-CODMONSW
MOVE CA-CODCESTX
MOVE CA-AORIGEN
MOVE CA-AORIGEN
MOVE CN-OCHENTA
MOVE E4294-TIPMVTO
MOVE WK-EXISTENCIA-CONTRATO
WRITE REGERRALTA
TO W-COPY-COESTREF
TO W-COPY-CODMONBE
TO W-COPY-CODCESTX
TO W-COPY-AORIGEN
TO W-COPY-ASUBORIG
TO W-COPY-DATCOMPV-LEN
TO WK-TIPMVTO
TO W-COPY-DATCOMPV-TEXT
FROM W-COPY-TABLA
IF
FS-ERRALTA
NOT EQUAL
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF.
2300-ESCR-ERR-ALTA-EXIT.
EXIT.
CA-FICH-OK
**************************************************************************************
* 3100-CERRAR-FICHEROS.
*
* SE CIERRAN LOS TRES FICHEROS (CONTBA3,ALTAS1 Y ERRALTA)
* Y SE COMPRUEBA QUE SE HAN CERRADO CORRECTAMENTE,EN CASO
* CONTRARIO SE PROCEDE AL TRATAMIENTO DE ERROR DE FICHERO
*
**************************************************************************************
3100-CERRAR-FICHEROS.
CLOSE CONTBA3
ALTAS1
IF
FS-CONTBA3
NOT EQUAL CA-FICH-OK
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF
IF
FS-ALTAS1
NOT EQUAL CA-FICH-OK
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF
.
3100-CERRAR-FICHEROS-EXIT.
EXIT.
**************************************************************************************
* 9100-LEER-FICH-ALTAS1
*
* SE REALIZA LA LECTURA DEL FICHERO DE ALTAS1,ACUMULANDO LAS
* ESTADÖSTICAS Y TRATANDO SI PROCEDE UN POSIBLE ERROR EN LA
* LECTURA
**************************************************************************************
9100-LEER-FICH-ALTAS1.
READ
ALTAS1 INTO BNYDE008
AT END
SET SW-SI-FIN-ALTAS1
SET FIN-PROCESO
MOVE HIGH-VALUES
NOT AT END
ADD CN-UNO
SET SW-NO-FIN-ALTAS1
MOVE BNYDE008-IDEMPR
MOVE BNYDE008-IDCENT
MOVE BNYDE008-IDPROD
MOVE BNYDE008-IDCONTRN
END-READ
IF FS-ALTAS1
MOVE
MOVE
MOVE
MOVE
CA-LEER-ALTAS1
CA-ALTAS1
FS-ALTAS1
CLAVE-ALTAS1
TO
TO
TO
TRUE
TRUE
CLAVE-ALTAS1
TO
TO
TO
TO
TO
TO
CONT-ALTAS1
TRUE
IDEMPR-ALTAS1
IDCENT-ALTAS1
IDPROD-ALTAS1
IDCONTR-ALTAS1
NOT EQUAL CA-FICH-OK AND
NOT EQUAL CA-FIN-FICH
TO
WK-PARRAFO
TO
WK-DDNAME
TO
WK-FILE-STATUS
TO
WK-DATOS-REGISTRO
41
Software Factory
Cáceres –
MOVE
Rafael Campillo Lorenzo.
CA-ERROR-LECTURA
TO
WK-DESCRIPCION
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF.
9100-LEER-FICH-ALTAS1-EXIT.
EXIT.
*************************************************************************************
* 9200-LEER-FICH-CONTBA3
*
* SE REALIZA LA LECTURA DEL FICHERO CONTBA3, ACUMULANDO LAS
* ESTADÖSTICAS Y TRATANDO SI PROCEDE UN POSIBLE ERROR EN LA
* LECTURA
**************************************************************************************
9200-LEER-FICH-CONTBA3.
READ
IF
CONTBA3 INTO LQYCONTL
AT END
SET SW-SI-FIN-CONTBA3
MOVE HIGH-VALUES
NOT AT END
ADD CN-UNO
SET SW-NO-FIN-CONTBA3
MOVE LQYCONTL-IDEMPR
MOVE LQYCONTL-IDCENT
MOVE LQYCONTL-IDPROD
MOVE LQYCONTL-IDCONTR
END-READ
FS-CONTBA3
MOVE
MOVE
MOVE
MOVE
MOVE
CA-LEER-CONTBA3
CA-CONTBA3
FS-CONTBA3
CLAVE-CONTBA3
CA-ERROR-LECTURA
TO
TO
TRUE
CLAVE-CONTBA3
TO
TO
TO
TO
TO
TO
CONT-CONTBA3
TRUE
IDEMPR-CONTBA3
IDCENT-CONTBA3
IDPROD-CONTBA3
IDCONTR-CONTBA3
NOT EQUAL CA-FICH-OK AND
NOT EQUAL CA-FIN-FICH
TO WK-PARRAFO
TO WK-DDNAME
TO WK-FILE-STATUS
TO WK-DATOS-REGISTRO
TO WK-DESCRIPCION
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF.
9200-LEER-FICH-CONTBA3-EXIT.
EXIT.
**************************************************************************************
* 9300-ERROR-FICHERO
*
* SE GUARDA EL TIPO DE ERROR Y SE LLAMA A LA RUTINA:
* XX_CANCELACION_PROCESOS_BATCH
**************************************************************************************
9300-ERROR-FICHERO.
MOVE
MOVE
MOVE
CA-TIPO-ERROR-F
CA-COD-RETORNO
CA-RESPONSABLE
TO
TO
TO
WK-TIPO-ERROR
WK-COD-RETORNO
WK-RESPONSABLE
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('WK-TIPO-ERROR')
COD_RETORNO('WK-COD-RETORNO')
RESPONSABLE('WK-RESPONSABLE')
DESCRIPCION('WK-DESCRIPCION')
PROGRAMA('WK-PROGRAMA')
PARRAFO('WK-PARRAFO')
DDNAME('WK-DDNAME')
FILE_STATUS('WK-FILE-STATUS')
DATOS_REGISTRO('WK-DATOS-REGISTRO')
END-FUN
.
9300-ERROR-FICHERO-EXIT.
EXIT.
**************************************************************************************
42
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
* 9400-ERROR-DB2
*
* SE GUARDA EL TIPO DE ERROR Y SE LLAMA A LA RUTINA:
* XX_CANCELACION_PROCESOS_BATCH
**************************************************************************************
9400-ERROR-DB2.
MOVE CA-TIPO-ERROR-D
TO WK-TIPO-ERROR
MOVE CA-RESPONSABLE
TO WK-RESPONSABLE
MOVE SQLCODE
TO WK-SQLCA
EXEC-FUN XX_CANCELACION_PROCESOS_BATCH
TIPO_ERROR('WK-TIPO-ERROR')
RESPONSABLE('WK-RESPONSABLE')
DESCRIPCION('WK-DESCRIPCION')
PROGRAMA('WK-PROGRAMA')
PARRAFO('WK-PARRAFO')
SQLCA('WK-SQLCA')
TABLA_DB2('WK-TABLA-DB2')
DATOS_ACCESO('WK-DATOS-ACCESO')
END-FUN
.
9400-ERROR-DB2-EXIT.
EXIT.
**************************************************************************************
* 9500-ESTADISTICAS
*
* SE MUESTRAN LAS ESTADISTICAS DE REGISTROS LEIDOS Y ESCRITOS
**************************************************************************************
9500-ESTADISTICAS.
MOVE
MOVE
MOVE
MOVE
CONT-CONTBA3
CONT-ALTAS1
CONT-ERRALTA
CONT-SALDO-VALOR-PTM
TO
TO
TO
TO
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
CA-ASTERISCO
CA-PROGRAMA-LQBBN01
WK-LECTURAS-CONTBA3
WK-LECTURAS-ALTAS1
WK-ESCRITURAS-ERRALTA
WK-ESCRITURAS-SALDO-VALOR-PTM
CA-ASTERISCO.
WK-CONT-CONTBA3
WK-CONT-ALTAS1
WK-CONT-ERRALTA
WK-CONT-SALDO-VALOR-PTM
9500-ESTADISTICAS-EXIT.
EXIT.
43
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
8. JCL (JOB CONTROL LANGUAJE)
Lenguaje de Control de Trabajos. Es un conjunto de especificaciones que constituyen
un lenguaje de programación de tareas para el sistema operativo que gobierna un
equipo informático, generalmente un Mainframe.
Mediante declaraciones y sentencias de JCL se informa al sistema operativo de las
tareas que debe realizar, la secuenciación de las mismas y los contenedores de datos
de entrada y salida para cada uno de los trabajos a ejecutar.
Nos ayuda a ejecutar programas, definir ficheros, etc dentro del SO de un Mainframe:
OS 390. Nos conectaremos a través de la interfaz TSO/ISPF.
Proporciona un alto grado de flexibilidad e independencia respecto de la localización
física de los ficheros y de los programas.
JCL define los requisitos de un trabajo ante el sistema operativo: la información de
contabilidad, los programas que hay que ejecutar, la secuencia de ejecución, los
ficheros necesarios, el equipo físico (Hw) necesario, la orientación del proceso, etc.
JCL tiene 18 tipos de sentencias distintas pero las más importantes y las que nos
interesan son: JOB, EXEC Y DD:
-
JOB: Asigna un nombre al trabajo y suministra información de contabilidad.
Puede haber una por trabajo.
-
EXEC: Ejecuta programas dentro de un JOB.
-
DD: Data Definition. Define los recursos que va a utilizar el programa, por
ejemplo los ficheros.
Cada trabajo tiene asignado una clase de ejecución que establece unas prioridades en
la cola de ejecución.
Las sentencias de control de trabajos eran en un principio fichas perforadas, de ahí
que se llame trabajo por lotes al que se ejecuta bajo el control de del JES (subsistema
de ejecución de trabajos.)
Las sentencias JCL se incluyen en el fichero SPOOL en la cola de entrada.
(ver #JCLREPOS)
8.1. Ficheros
Seguimos trabajando con ficheros secuenciales. Definición de registros:
•
Registros Lógicos: Es el que mejor se adapta al programa con el que estamos
trabajando.
•
Registros Físicos: Es el que mejor le viene a la máquina con la que estemos
trabajando.
8.2. VTOC. Tabla de contenido del volumen.
La etiqueta de volumen en disco se encuentra en registro 2 de la pista 0. Contiene el
nombre del disco e información sobre dónde encontrar la tabla de contenido del
volumen (VTOC).
El VTOC es el equivalente de Mainframe a la tabla FAT en un computador personal.
44
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
8.3. Ficheros Particionados: PDS.
Es una biblioteca para el OS-390 de ficheros secuenciales. Contienen cierto número
de miembros (ficheros secuenciales) y un directorio.
El directorio está situado en el comienzo del fichero y contiene una entrada para cada
miembro. Las entradas están ordenadas alfabéticamente por nombre de miembro.
8.4. Formas de localizar un fichero. Catálogos
Hay dos formas posibles:
1. En la descripción de la sentencias DD está el nombre del fichero y su ubicación
(unidad y volumen).
2. Por medio de un catálogo, que es un fichero que contiene el nombre de otros
ficheros y sus ubicaciones. En la sentencia DD hay un parámetro que se utiliza
para este propósito. Una vez creado un fichero, se puede almacenar
información sobre él en un catálogo. Siempre hay un catálogo disponible en
cualquier sistema, el denominando catálogo maestro, que es para ficheros del
sistema.
8.5. Lenguaje de Control de Trabajos. Sintaxis.
Campos de las sentencias JCL:
Identificador
Nombre
Operación
Parámetros
// Campo delimitador de una sentencia, estando ambas barras en las dos
primeras columnas.
// * Continuación de una sentencia en la siguiente línea.
NOMBRES-SENTENCIAS: Han de ser como máximo 8 caracteres alfanuméricos más
#, @ y $, y no pueden comenzar por un número.
Cada sentencia JCL debe estar en mayúsculas.
8.6. Sentencia JOB
// NOMBREJOB JOB
contabilidad, programador
parámetros_posicionales: (p1,p2,p3) param_palabra_ clave, campo
La sentencia JOB indica el comienzo de un trabajo e indica al sistema cómo
procesarlo. Es necesaria y debe ser la primera en cada trabajo.
Parámetros de palabra clave en la sentencia JOB:
MSGLEVEL(A,B)
Indica si se han de imprimir o no las sentencias de JCL y los mensajes de asignación
de recursos en el fichero de actividad del trabajo (job log).
A: Sentencias JCL.
A: 0 JOB
1 JOB, EXEC, DD + procedim.
2 JOB, EXEC, DD
B: Mensajes
B: O NADA
1 SMS, JES, RACF
45
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
MSGCLASS
Asigna el fichero de actividad del trabajo a una clase de salida. (spool)
CLASS
Asigna el trabajo a una clase. CLASS=A Clase de Ejecución.
NOTIFY
Solicita que, cuando el trabajo finalice, el sistema envíe un mensaje al ID de usuario
de TSO especificado.
NOTIFY=&SYSUID
TIME
Especifica la longitud máxima de tiempo durante la cual un trabajo o un paso de
trabajo utilizarán el procesador. El tiempo de procesador utilizado se indica mediante
mensajes. Con este parámetro podemos evitar que un proceso batch que se quede
bloqueado, ocupe recursos del sistema por un tiempo indefinido.
TYPRUN
Se usa para solicitar
TYPRUN=SCAN.
un
tipo
de
procesamiento
especial
para
el
trabajo.
RESTART
Se usa para rearrancar un trabajo, comenzando desde un paso especificado y saltando
los pasos anteriores o comenzando desde el punto de comprobación.
RESTART=NombrePaso.
REGION
Se usa para especificar la cantidad máxima de espacio de memoria que puede usar un
trabajo.
COND O IF/END/ELSE
Podemos establecer condiciones para que un trabajo se ejecute o no.
8.7. Sentencia DD
// NOMBREDD DD parámetros_posicionales parámetros_palabra_clave
Los programas referencian NOMBRESDD (definición de datos):
COBOL
JCL
SELECT PEDIDOS
ASSIGN TO PEDIDOS
//BE05R JOB CLASS=…
//*
//INFPEDID EXEC PGM=DEMOPROG
//PEDIDOS DD DSN=PEDIDOS.DIC,DISP=SHR
//INFORME DD SYSOUT=X
( SPOOL)
//*
El NOMBREDD es un nombre lógico.
Un nombre de fichero (data set name es el nombre de un fichero físico (en cinta, disco,
etc).
La salida puede enviarse a un spool en lugar de enviarse a un fichero. La sentencia
DD establece el enlace entre un nombre de DD lógico y un fichero o spool físico.
Parámetros posicionales:
46
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
*: Definimos un fichero incorporado. Podemos escribir en las líneas de debajo
el contenido del fichero. ¿Cierre? : /*
DATA: Igual que la anterior, pero podemos incluir sentencias JCL. Cuando
nosotros creamos un trabajo lo hacemos dentro de un fichero.
DUMMI: Todas las operaciones de E/S deben pasarse por alto, y la asignación
de dispositivos, la asignación de espacio y la disposición de ficheros deben ignorarse.
Define un fichero ficticio. Es una especie de comodín.
//NOMBREDD
… (DATOS)
/* ó //*
//NOMBRE
DD
ó
DD
[* / DATA]
//(fin de datos)
DUMMY
Parámetros de palabra clave:
DSN
Especifica el nombre de un fichero. Ha de tener las mismas condiciones que los
nombres en JOB y EXEC para un nombre de fichero simple, aunque también puede
haber nombres de ficheros compuestos, que tendrán como máximo 44 caracteres
(incluyendo los puntos): T971650.FICHERO.COBOL. No es muy práctico utilizar nombres
simples de fichero en un entorno con muchos ficheros. Suelen utilizarse nombres
compuestos. Además, un nombre de fichero con un único calificador se catalogará en
el catálogo maestro, situación que se debe evitar a toda costa. Cada nombre debe ser
único cuando se utiliza el catálogo.
Un miembro de un fichero particionado puede utilizarse como si fuera un fichero
secuencial poniendo el nombre de miembro entre paréntesis.
Dentro de un fichero PDS (biblioteca), tenemos también ficheros secuenciales
llamados miembros. Así se referencia un miembro:
DSN=T971650.FICHERO.COBOL(MIEMBRO1).
FICHEROS TEMPORALES:
Los nombres de fichero temporal suelen usarse para especificar al sistema ficheros de
trabajo. El sistema borrará los fichros temporales una vez terminado el trabajo, ya sea
de forma normal o anormal.
DSN=&&NOMBRE ó DSN= ,
Si omitimos el parámetro DSN de la sentencia DD será el sistema quien asignará un
nombre.
Es posible hacer referencia a un fichero después de su primera utilización en el
trabajo. Para ello, debe hacerse referencia a una sentencia DD anterior que identifique
el fichero.
//TRABAJO1 JOB
//PASO1 EXEC
//FICH1 DD DSN=FICHERO
//FICH2 DD DSN=*.FICH1
…
//PASO2 EXEC
//FICH3 DD DSN=*.PASO1.FICH1
Con el * se hace referencia a algo anterior. Así podemos acceder a FICH1 del paso
anterior, porque al llegar al final del paso1 el fichero se libera.
47
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
DISP
Indica la disposición del fichero. Puede estar creado o ser nuevo, podemos compartirlo
o no…
DISP=(ESTADO INICIAL,
=(NEW
=(OLD
=(SHR
=(MOD
TERMINACIÓN NORMAL,
,DELETE
,KEEP
,CATLG
,PASS
TERMINACIÓN ANORMAL)
,DELETE)
,KEEP)
,CATLG)
,UNCATLG)
Todos los subparámetros del parámetro DISP son posicionales.
ESTADO INICIAL: Es el estado actual del fichero:
-
-
NEW se usa cuando el fichero aún no existe y debe crearse en este paso.
OLD se usa cuando el fichero ya existe y el trabajo lo debe utilizar de forma
exclusiva.
SHR se usa cuando el fichero ya existe y puede ser compartido por varios
trabajos. Otro usuario lo puede utilizar en otro trabajo mientras que con OLD
lo abrimos de forma exclusiva.
MOD se usa cuando deben añadirse nuevos datos detrás de los ya existentes
en un fichero secuencial. Si el fichero aún no existe, MOD equivaldrá a NEW.
TERMINACIÓN NORMAL: Indica la disposición del fichero cuando el paso finaliza de
manera normal.
TERMINACIÓN ANORMAL: Indica la disposición del fichero cuando el paso finaliza de
manera anormal (ABEND).
-
-
DELETE: Borra el fichero. También desaparece su nombre del catálogo.
KEEP: Mantiene el fichero y lo guarda
CATLG: Cataloga el fichero. Si se trata de ficheros permanentes, suele
utilizarse siempre CATLG cuando hay que crearlos. Los ficheros que ya están
catalogados no necesitan (ni pueden) volverse a catalogar.
UNCATLG: Descataloga el fichero. El nombre del fichero se elimina del
catálogo, pero el fichero no se borra de su volumen.
PASS: Se utiliza cuando un fichero temporal debe transferirse a otro paso del
trabajo.
Nota: Si se intenta catalogar un nuevo fichero con el mismo nombre que uno ya
catalogado, el sistema se negará a hacerlo y en el fichero de actividad del trabajo (job
log) aparecerá el mensaje de error NOT CATALOGUED. No obstante, el sistema creará
el fichero y lo situará en un volumen alternativo. El acceso sólo será posible mediante
la VTOC.
Si no se indica el parámetro DISP, por defecto tomará los valores:
DISP(NEW,DELETE,DELETE) Crearía un fichero temporal que al termino del trabajo
se borraría.
Usos más frecuentes de DISP:
DISP=SHR Toma como valor por omisión SHR,KEEP,KEEP. Se usa par
afichero s ya existentes compartidos con otros usuarios..
DISP=OLD OLD,KEEP,KEEP. Se usa para ficheros ya existentes que no se
comparten con otros usuarios.
DISP=(,CATLG,DELETE) NEW,CATLG,DELETE. Se usa para crear nuevos
ficheros permanentes. Éstos siempre deben catalogarse.
DISP=(OLD,DELETE,KEEP) Se usa para eliminar un fichero existente que ya
no se necesita. Su nombre se elimina automáticamente del catálogo.
48
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
UNIT
Hacemos referencia a la unidad en la que está o queremos que se guarde el fichero.
Aquí entra en juego el subsistema SMS. Si sabemos que SMS está activado, UNIT se
puede omitir ya que SMS se encargará de guardar el fichero donde le interese
independientemente de lo que nosotros le indiquemos en este parámetro.
UNIT=TAPE
UNIT=SYSDA
=SYSALLDA
VOL
VOL=SER=EDPAK5 SER sería el número de serie
=REF=NOMBREFICH
<<Una unidad es física, y un volumen es lógica. Mi HD sería la unidad y una partición
sería un volumen>>
DCB
Bloque de Control de Datos.
FORMATO DEL REGISTRO
DCB=(RECFM=(F,FB,V,VB,V),
LG DEL REGISTRO
TAMAÑO BLOQUE
LRECL=80,
BLKSIZE=3600)
SPACE
SPACE=(TipoUnidad(TRK,CYL,…), (PQ,SQ,DIR), RLE (Defragmentar o comprimir))
DIR: Número de bloques de directorio. Suele ser cercano a los 5 miembros. Si lo
indicamos estamos creando un PDS.
SYSOUT
Hacemos referencia a una clase de salida.
SYSOUT =*
JOB…MSGCLASS=X.
8.8. Sentencia EXEC
// NOMBRE-PASO EXEC
parámetros_posicionales
parámetros_palabra_clave
Cada paso del trabajo empieza con una sentencia EXEC que, o bien indica el
programa que se desea ejecutar, o bien invoca un procedimiento catalogado o
incorporado.
Es necesaria una sentencia EXEC para cada paso del trabajo.
Un trabajo puede tener como máximo 255 pasos.
Parámetros posicionales:
NOMBRE DEL PROGRAMA
Proporciona el nombre del programa que se ejecutará.
//PASO1 EXEC PGM=LQBBN01
NOMBRE DEL PROCEDIMIENTO
Identifica el procedimiento que se llamará y se ejecutará.
//PASO1 EXEC PROC=BASICJCL
//PASO1 EXECE BASICJCL
Parámetros de palabra Clave:
49
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ACCT
Especifica información de contabilidad para este paso
ADDRSPC
Indica el tipo de memoria para este paso (virtual o real)
COND
Indica la comprobación del código de retorno que se utiliza para determinar si este
paso debe ejecutarse o no. Tiene la misma utilidad que en el JOB pero a nivel local en
el EXEC, y en caso de que esté definido también en el JOB, es el de éste el que manda.
DPRTY
Asigna una prioridad de despacho para el espacio de direcciones
DYNAMNBR
Mantiene un número de asignaciones de ficheros para su reutilización
PARM
Transfiere información variable al programa en proceso.
PERFORM
Indica el grupo de rendimiento que se utiliza en este paso.
RD
Indica si el operador debe ejecutar el rearranque automático del paso si éste falla
REGION
Especifica en megaoctetos o kiloctetos la cantidad de espacio que puede utilizar este
paso. Tiene la misma utilidad que en el JOB pero a nivel local en el EXEC, y en caso
de que esté definido también en el JOB, es el de éste el que manda.
TIME
Indica el tiempo máximo que el paso puede utilizar el procesador. Tiene la misma
utilidad que en el JOB pero a nivel local en el EXEC, y en caso de que esté definido
también en el JOB, es el de éste el que manda.
8.9. Utilidades de JCL
Son programas internos dentro del SO. Un conjunto de programas codificados y
comprobados que realizan una serie de funciones útiles. Ayudan a la organización y el
mantenimiento de los datos. Las ejecutaremos dentro del EXEC, dentro de la
ejecución de cada paso.
Los programas de utilidad se controlan mediante dos tipos de sentencias:
-
Sentencias de JCL
Sentencias d Utilidad.
Las sentencias de control de utilidades NO EMPIEZAN con //.
Deben codificarse desde la columna 2 hasta la 71 (ambas inclusive).
Si una sentencia sobrepasa la columna 71, se utilizan las reglas sobre continuación
de sentencias:
1- interrumpir la sentencia en una coma
2- teclear un carácter (que no sea espacio en blanco) en la columna 72
3- continuar la sentencia empezando en la columna 16 de la línea siguiente.
50
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
La sentencia de control de utilidades se codifica inmediatamente después de la
sentencia //SYSIN DD * (el asterisco se puede sustituir por el DATA)
/*
IEHLIST
Lista los directorios de un fichero particionado o bien los contenidos de la tabla de un
volumen: VTOC.
//PASO1 EXEC PGM=IEHLIST
//* Sentencia DD que suele estar en la mayoría de los programas de
//* utilidades. En SYSOUT indicamos la clase de salida de los mensajes
//* de utilidad
//SYSPRINT DD SYSOUT=*
//NOMBRE1 DD VOL=, UNIT=, DISP=SHR,
//SYSIN DD *
LISTPDS DSNAME=NOMBREFICHERO,VOL=Dispositivo=num-serie,FORMATO
Ó
LISTVTOC DSNAME=NOMBREFICHERO,VOL=Dispositivo=num-serie,FORMATO
/*
LISTPDS lista el directorio de un PDS, donde pueden observarse los miembros del
fichero
LISVTOC lista la VTOC completa de un volumen en un disco o parte de la misma.
El formato será DUMP (Hexadecimal) por defecto o FORMAT (Saca listado legible).
IEBGENER
Se utiliza sobretodo para crear, copiar o imprimir ficheros secuenciales y
particionados. Copia datos de un dispositivo a otro, crea un PDS a partir de un fichero
secuencial, amplía o incorpora miembros a un PDS, crea ficheros editados, cambia la
distribución en bloques o modifica las longitudes de registro lógico de un fichero…
//PASO1 EXEC PGM=IEBGENER
//* Sentencia DD que suele estar en la mayoría de los programas de
//* utilidades. En SYSOUT indicamos la clase de salida de los mensajes
//* de utilidad
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD …
//SYSUT2 DD …
//SYSIN DD *
SENTENCIA DE CONTROL DE UTILIDAD
/*
SYSUT1 define el fichero de entrada, SYSUT2 define el fichero de salida, SYSIN define
la entrada de las sentencias de control de la utilidad. La sentencia SYSIN DD puede
codificarse como DUMMY si el programa (IEBGENER) NO REQUIERE EDICIÓN.
Ejemplo: //SYSIN DD DUMMY. Si se codifica la sentencia SYSIN DD como DUMMY,
todo el fichero de ENTRADA se copia secuencialmente.
La sentencia SYSUT2 describe el fichero de salida y puede codificarse como salida en
fichas, salida impresa, un fichero secuencial o un fichero particionado.
Podemos desfragmentar (comprimir) un fichero poniendo como ficheros de entrada y
salida los mismos ficheros:
//SYSUT1 DD DSN=FICH1
//SYSUT2 DD DSN=FICH1
51
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Sólo usamos las sentencias de control de utilidades de IEBGENER cuando
el fichero no existe y lo creamos directamente:
//SYSUT1 DD DSN=FICH1
//SYSUT2 DD DSN=NOMBRE.PDS, DISP=SHR,…
//SYSIN DD *
GENERATE MAXNAME=1
NÚMERO DE MIEMBROS
MEMBERNAME=MIEMBRO NOMBRES DE LOS MIEMBROS
/*
IEBCOPY
Nos va a servir para copiar miembros de particionados a otro PDS o para fusionarlos,
para copiar de un PDS a un secuencial (descarga), copia de uno o más ficheros
secuenciales creados por una operación de descarga a un PDS(carga) y compresión de
un PDS: copiándolo sobre sí mismo.
//PASO1 EXEC PGM=IEBCOPY
//* Sentencia DD que suele estar en la mayoría de los programas de
//* utilidades. En SYSOUT indicamos la clase de salida de los mensajes
//* de utilidad
//SYSPRINT DD SYSOUT=*
//NOMBRE1 DD …
FICHERO DE ENTRADA
//NOMBRE2 DD …
…
//NOMBREN DD … FICHEROS TEMPORALES.
//SYSIN DD *
COPY OUTDD=NOMBRE1 NOMBRE DEL FICHERO DE SALIDA
INDD=(ONMBREDD,(NOMBREDD,R),…) FICHEROS DE ENTRADA.
SELECT MEMBER=(NOMBRE1,NOMBRE2,…)
EXCLUDE
MEMBER=(NOMBRE1,NOMBRE2,…) O PONEMOS UN U OTRA, LOS
QUE QUEREMOS COPIAR, O LOS QUE NO.
/*
IEBCOMPR
Nos va a servir par acomparar 2 ficheros, tanto 2 secuenciales como 2 particionados
(SYSUT1 Y SYSUT2).
Dos ficheros secuenciales los comparamos directamente. En el caso de los PDS no
mira el contenido de los miembros, sino el de los directorios. Por tanto para
IEBCOMPR, F1 y F2 son iguales independientemente del contenido de los miembros.
IEFBR14
Este programa no hace nada en particular. Es un COMODÍN. Ejemplo: imaginemos
que queremos crear un fichero en un paso y no queremos que haga nada máS:
//PASO1 EXEC PGM=IEFBR14
//FICHERO1 DD DSN=FICHERO,DISP=…,…
JCL no nos dejaría poner esta sentencia sola. Para ello necesitaríamos meterla en un
paso. Usamos nuestro comodín que no hace nada.
DFSORT
MERGE, SORT. Fusionamos y ordenamos ficheros.
//PASO1 EXEC PGM=MERGE ó SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN= fichero a ordenar
52
Software Factory
Cáceres –
//SORTIN2
…
Rafael Campillo Lorenzo.
DD….
PODEMOS ORDENAR HASTA 16 FICHEROS
//SORTIN16 DD…
//SORTOUT DD DSN=fichero de salida.
----- ficheros de trabajo
--//SYSIN DD *...
... sentencias de control
/*
Sentencias de control: incluimos una serie de campos por los que queremos que
ordene y que se incluyan en el fichero de salida:
SORT FIELDS=( Pos inicial, longitud, tipodato, orden (A,D))
MERGE FIELDS=(…)
INCLUDE FIELDS=(…)
OMIT FIELDS=(…)
INCLUDE COND=(Pos inicial, longitud, tipodato, operador, valor)
Operador: eq, neq, gt, lt, ngt, nlt
DFDSS
Herramienta de gestión de espacio de datos en Disco. Sentencias: COMPRESS, COPY,
DUMP, RELEASE, RESTORE.
8.10. Sentencias avanzadas JCL. CONCATENACIÓN DE FICHEROS
Concatenación es la agrupación de un conjunto de ficheros independientes en un
único fichero lógico.
REGLAS DE CONCATENACIÓN
- 255 Ficheros secuenciales como máximo
- 16 ficheros particionados como máximo
- Los ficheros particionados no pueden mezclarse con los secuenciales.
- Los miembros de los ficheros particionados se consideran ficheros
secuenciales.
- El formato de registro (RECFM) debe ser el mismo en todos los ficheros que se
concatenan.
- El tamaño de bloque (BLKSIZE) no tiene por qué ser el mismo en todos los
ficheros, pero deberá especificarse en primer lugar el fichero con el mayor
tamaño de bloque.
- En ficheros de formato de registro variable, la longitud de registro lógico
(LRECL) no tiene por qué ser la misma para todos los ficheros, pero deberá
especificarse en primer lugar el fichero que tenga la mayor longitud de registro
lógico.
- Nota: los dos puntos anteriores no suponen conflicto. En caso de que el fichero
con el mayor BLKSIZE no coincida con el de mayor LRECL, se especifica en
primer lugar el de mayor BLKSIZE y se le asigna la mayor de las LRECL
(aunque no sea la suya).
53
Software Factory
Cáceres –
EDUC.C
Rafael Campillo Lorenzo.
EDUC.B
[EDUC.A
EDUC.B
EDUC.C]
EDUC.A
Dejar en blanco el campo de nombre de DD del fichero concatenado y codificar
únicamente las // en las columnas 1 y 2.
(ver #JCLREPOS)
54
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXOS
ANEXO A: Notas y apuntes sobre COBOL y codificación.
•
Los grupos de datos en COBOL son ALFANUMÉRICOS (Caracteres). Un
número NO se puede mover a un alfanumérico, pero sí a un grupo, con lo que
así podríamos hacer una conversión de NÚMERO a ALFANUMÉRICO
declarando el alfanumérico como numérico dentro del grupo y con el mismo
tamaño, pero ocpuamos 2 zonas distintas de memoria REDEFINE. Ambas
variables apuntan a la misma zona de memoria. Ha de ir a continuación de la
variable que se redefine.
05
05
A
B
PIC X(10)
REDEFINES A
PIC 9(10)
Usando los REDEFINES se pueden crear COPYS con diferentes
esctructuras redefiniendo siempre la anterior estructura con el
mismo tamaño.
Para realizar la operación contraria, es decir, mover
ALFANUMÉRICO a un NUMÉRICO o compacto, definimos también
grupo. Ejemplo: mover BNYDE008-FECAPER FEC-VALOR-TRA(1 1)
X(10)
9(8)
*-------------01 FECAPER-NUM
PIC X(8).
01 FECAPER-COMP3
REDEFINES FECAPER-NUM.
05 FECAPER-FECHA
PIC 9(8).
*-------------MOVE BNYDE008-FECAPER(1:4)
MOVE BNYDE008-FECAPER(6:2)
MOVE BNYDE008-FECAPER(9:2)
*-------------MOVE FECAPER-FECHA
•
TO
TO
TO
FECAPER-NUM(1:4)
FECAPER-NUM(5:2)
FECAPER-NUM(7:2)
TO
FEC-VALOR-TRA(1)
un
un
Para CREAR una tabla de una Base de Datos, modificamos el DCLGEN de la
tabla, quitando la parte de COBOL y quedándonos con la de DB2, y podemos
crear un nuevo fichero CREATAB.SQL cambiando los NOT NULL por NOT
NULL WITH DEFAULT.
Otra manera sería idéntica pero usando el SCRIPT del centro del mandatos e
insertando la sentencia SQL (CREATE TABLE NombreDCLGEN), usando
también la DCLGEN.
Para INSERTAR valores en la tabla, tenemos también dos opciones. O nos
creamos un fichero INSERT.SQL donde generamos la sentencia SQL del
INSERT (copiaríamos la parte de la tabla de la DCLGEN y daríamos valores a
los campos que nos interesase), o
En el centro de mandatos, pinchamos en la pestaña INTERACTIVOS / SQL
ASSIST, seleccionamos la opción INICIAR / INSERT, y en la pestaña TABLAS
seleccionamos la tabla en la que queremos insertar. Por último vamos a la
pestaña INSERTAR donde ya nos aparecen todos los campos de la tabla. De
esta manera además se controla la cantidad y tipo de valores al insertar.
Cuando la casilla de relleno se pone de color rojo significa que nos hemos
excedido en la longitud del campo.
55
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Otra buena idea a la hora de probar el programa es crear una tabla auxiliar
con otro nombre, copia de la que usemos para copiando dicha tabla después
de cada ejecución que nos cambie los valores de la tabla, o bien usar en el
código la sentencia ROLLBACK que vuelve las tablas a su estado inicial tras la
ejecución de un proceso.
•
Para crear FICHEROS usamos un programa llamado SPFPC.EXE.
Los caracteres de las cadenas se introducen tal cual, y para los compactos ha
de tenerse en cuenta que ocupan:
PARES: (Nº Cifras / 2) + 1
IMPARES: (Nº Cifras + 1) / 2
Los pares comienzan por 0 y los impares NO. Ejemplo: 45 y 345.
Cifras pares
0
4
5
C
Cifras impares.
3
4
5
C
La C siempre ha de acabar abajo.
Si tuviésemos un fichero de entrada cuya COPY tuviese muchos campos y la
mayoría de ellos fuesen COMP -3, resultaría tedioso insertar de esta manera
varios registros en el fichero para hacer las pruebas.
Para ello bastaría con generar otro proyecto con un pequeño programa que
declarase un fichero de salida, escribiese uno o varios registros en él, y lo
cerrase. Ese fichero de salida sería el fichero de entrada que usase nuestro
programa.
Esta operación no requiere mucho esfuerzo desde el momento que podemos
coger la COPY del fichero para hacer los MOVE ... TO. Así controlaríamos
mucho mejor lo que insertamos en cada registro y dónde lo insertamos.
Nosotros ponemos valores numéricos y el programa nos los escribe como
COMP-3.
56
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 1: Listado de FILE – STATUS
Código Significado
00
No hay información adicional
02
La sentencia READ fue ejecutada satisfactoriamente, pero fue detectada una
clave duplicada.
04
La sentencia READ fue ejecutada satisfactoriamente, pero el largo de registro
procesado no corresponde
05
Una sentencia OPEN es ejecutada satisfactoriamente, pero el archivo
referenciado no es está presente al momento de ejecutar el OPEN. Si el modo de
apertura es I-O o EXTEND, el archivo se creará
10
Una sentencia secuencial READ fue intentada y no existe otro registro lógico en
el archivo porque ha sido encontrado el fin de archivo.
12
Extensión IBM. No se encontró un registro de Subfile modificado
14
Una sentencia READ secuencial fue intentada para un archivo relativo y el
número de dígitos significativos en el número relativo de registro fue más largo que el
tamaño del ítem de datos de la clave relativa descrita para el archivo
21
Existe un error de secuencia para un archivo indexado accesado
secuencialmente. El valor de la clave de registro ha sido cambiada por el programa entre
la ejecución satisfactoria de una sentencia READ y la ejecución de la siguiente
sentencia REWRITE para el archivo, o los requerimientos de orden ascendente para los
valores claves de registro fueron violados.
22
Se intentó escribir un registro que creará una clave duplicada en un archivo
relativo; o se intentó escribir o sebreescribir (WRITE/REWRITE) un registro que creará
una clave de registro principal duplicada en un archivo indexado. CPF4759, CPF5008,
CPF5026, CPF5034, CPF5084, CPF5085
23
Se intentó hacer un acceso directo (Random) a un registro que no existe en el
archivo.
CPF5001, CPF5006, CPF5013, CPF5020, CPF5025
24
Se intentó realizar una escritura más allá de los límites definidos externamente
para un archivo relativo o indexado. Una sentencia secuencial WRITE fue intentada
para un archivo relativo y el número de dígitos significativos en el número relativo de
registro era más largo que el tamaño de la clave de registro relativo descrito para el
archivo.
CPF5006, CPF5018, CPF5021, CPF5043, CPF5272
57
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
30
No hay información adicional.
CPF4192, CPF5101, CPF102, CPF5129, CPF5030, CPF5143
34
Existe un error permanente porque existe una violación, se intentó escribir más
allá de los límite definidos externamente para un archivo secuencial.
CPF5116, CPF5018, CPF5272, sí la organización es secuencial.
35
Se intentó una sentencia OPEN con la frase INPUT, I-O o EXTEND sobre un
archivo no opcional que no está presente.
CPF4101, CPF4102, CPF4103
37
Se intento una sentencia OPEN sobre un archivo que no soporta el modo de
apertura especificado en la sentencia OPEN. Posibles Violaciones son:
La frase EXTEND o OUTPUT fue especificada pero el archivo no soporta operaciones
de escritura.
La frase I-O fue especificada pero el archivo no soporta las operaciones de entrada y
salida permitidas.
La frase INPUT fue especificada pero el archivo no soporta las operaciones de lectura.
38
Se intentó una sentencia OPEN sobre un archivo cerrado previamente con
bloqueo (lock).
39
La sentencia OPEN no fue ejecutada satisfactoriamente debido a un conflicto
entre los atributos del archivo físico y los atributos especificados para ése archivo en el
programa.
Comprobar error de nivel para el archivo.
CPF4131
41
Se intentó una sentencia OPEN para el archivo en el modo de apertura.
42
Se intentó una sentencia CLOSE para un archivo que no está abierto.
43
Para un archivo secuencial, en el modo acceso secuencial, la última sentencia de
entrada salida ejecutada para el archivo asociado previa a la ejecución de una sentencia
REWRITE ¿???.
Para archivos relativos e indexados en el modo de acceso secuencial, la última sentencia
de entrada-salida ejecutada para el archivo. ¿???.
44
Una violación de ¿??, existe porque se intento sobreescribir un registro en el
archivo y el registro no es del mismo tamaño que el registro a reemplazar.
46
Se intentó una sentencia secuencial READ sobre un archivo que está abierto en
el modo I-O sin haber establecido un registro válido debido a que la sentencia start no
se ejecutó con éxito, la sentencia READ precedente fue insatisfactoria o causa una
58
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
condición AT END.
CPF5001, CPF5025, CPF5183
47
La ejecución de una sentencia READ o START fuen intentada sobre un archivo
que no está abierto en el modo INPUT o I-O.
48
La ejecución de una sentencia WRITE fue intentada sobre un archivo que no
está abierto en el modo I-O, OUTPUT o EXTEND.
49
La ejecución de una sentencia DELETE o REWRITE fue intentada sobre un
archivo que no está abiertoen el modo I-O.
90
Otros errores:
Archivo no encontrado.
Miembro no encontrado.
Falta exepciones I-O.
CPF4101, CPF4102, CPF4103 si un USE es aplicable para el archivo (sobre un no
opcional con OPEN OUTPUT).
Las siguientes excepciones se monitora genéricamente :
CPF4101 al CPF4399
CPF4501 al CPF4699
CPF4701 al CPF4899
CPF4901 al CPF4999
CPF5001 al CPF5099
CPF5101 al CPF5399
CPF5501 al CPF5699
Estas excepciones causan un FILE STATUS = 90. Si un procedimiento USE es
aplicable, se ejecuta. De otra manera, el programa termina y entrega al operador la
excepción y la opción de cancelar, vaciado parcial o vaciado total de variables.
91
Tipo de acceso no definido o no autorizado.
CPF2207, CPF4104, CPF4236, CPF5057, CPF5109, CPF5134, CPF5279
92
Error lógico:
Archivo bloqueado
El archivo ya está abierto
I-O para un archivo cerrado
READ después de fin de archivo
59
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
CLOSE para un archivo ya cerrado
CPF4106, CPF4132, CPF4740, CPF5013, CPF5067, CPF5070, CPF5119, CPF5145,
CPF5146, CPF5149, CPF5176, CPF5209
93
El archivo esta en conflicto con otro usuario.
94
¿??? y la última operación no fue un READ satisfactorio.
95
Información del archivo inválido o incompleta.
Se especifican claves duplicadas en el programa COBOL. El archivo ha sido abierto
satisfactoriamente pero el archivo indexado de base de datos fue creado con clave única;
o
No se especificó clave duplicada en el programa COBOL, y el archivo de base de datos
fue creado permitiendo claves duplicadas.
98
Grave errór interno en la estructura del fichero, generalmente se suelen provocar
cuando hay un corte eléctrico o una salida brusca del programa y algún fichero indexado
se ha quedado abierto, lo que suele ocurrir es problema de correspondencia entre claves
y datos, se recomienda hacerle un RECOBERY (RM/COBOL) o el que corresponda a
cada compilador para rehacer las claves.
En algunos casos , es posible que éste error se deba a un problema físico del disco, en
ese caso también será conveniente copiarlo en otro sitio "físico"
99
Al borrar, leer o reescribir un registro que está siendo bloqueado por otro
usuario.
9 A El trabajo a sido cancelado de una manera controlada por comandos CL, CNLJOB,
TRMSBS, TRMCPF, PWRDWNSYS.
CPF4741
Se ha enviado un mensaje de escape durante una operación de entrada READ desde
dispositivo de programa
9 C Falla de adquisición, la sección no ha partido o conectado.
9 D El registro está bloqueado
CPF5027, CPF5032
9 G Excepción de salida para dispositivo o sesión
9 H Operación ACQUIRE fallida. ¿? Apropiado por otro programa o inhabilitado. (9H
es el resultado cuando una operación ACQUIRE causa cualquiera de las excepciones
monitoreadas para 90 o 9N cuando ocurre.
9 I Operación WRITE fallida
CPF4702, CPF4737, CPF5052, CPF5076
60
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
9 K Nombre de formato inválido, formato no encontrado
CPF5022, CPF5023, CPF5053, CPF5054, CPF5121, CPF5152, CPF5153, CPF5186,
CPF5187
9 M Último registro escrito en Subfile
CPF5003
9 N Error temporal de I-O en hardware (potencialmente recuperable). Error durante la
sesión de comunicaciones.
CPF4145, CPF4146, CPF4193, CPF4229, CPF 4291, CPF4299, CPF4354, CPF4354,
CPF4526, CPF4542, CPF5477, CPF4592, CPF4602, CPF4603, CPF4611, CPF4612,
CPF4616, CPF4617, CPF4622, CPF4623, CPF4624, CPF4624, CPF4625, CPF4628,
CPF4629, CPF4630, CPF4631, CPF4632, CPF4705, CPF5107, CPF5128, CPF5166,
CPF5198, CPF5280, CPF5280, CPF5282, CPF5287, CPF5293, CPF5352, CPF5353,
CPF5517, CPF5524, CPF5529, CPF5530, CPF5532, CPF5533
9 P Open falló porque el archivo no puede ser ubicado bajo control ¿???
CPF4293, CPF4326, CPF4327, CPF4328, CPF4329
61
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 2: Tutorial de los SQLCODES y sus causas
Cuando ejecutamos un programa que usa SQL, DB2 nos devuelve un SQLCODE que
nos informa si nuestro código SQL se ejecutó correctamente o no. Estos son los
SQLCODES más comunes que puede devolver DB2 tras la ejecución de sentencias
SQL:
SQLCODE +100 SQLSTATE 02000
SQLCODE -102 String constant is too long
SQLCODE -117 The number of values you are trying to INSERT
does not match the number of columns
SQLCODE -180 SQLSTATE 22007
Bad data in Date/Time/Timestamp
String representation of DATE, TIME, TIMESTAMP is invalid
SQLCODE -181 SQLSTATE 22007
Bad data in Date/Time/Timestamp
Value for DATE, TIME, TIMESTAMP is invalid
SQLCODE -199 Illegal use of the specified keyword.
SQLCODE -204 Object not defined to DB2
SQLCODE -205 Column name not in specified table
SQLCODE -206 Column does not exist in any table in the SELECT
SQLCODE -216
You need to use the same number of expressions on both sides of the comparison.
when using multiple operands in a comparison,
Correct example:
WHERE (E.SALARY, E.COMM) IN
(SELECT S.PAY, S.COMMISSION
Incorrect example:
SQLCODE +222 Trying to fetch a row that fell through a DELETE hole
SQLCODE +223 Trying to fetch a row that fell through an UPDATE hole
SQLCODE -224 FETCH cannot make an INSENSITIVE cursor SENSITIVE
SQLCODE -229 The locale specified in a SET LOCALE statement was not found.
SQLCODE +231 FETCH
but you did a BEFORE or AFTER and you are not on a valid row
SQLCODE +304 Value cannot be assigned to this host variable because it is out of range
SQLCODE -305 Null indicator needed
SQLCODE -311 Varchar, insert or update.
You didn’t set the -LEN field with the right data length
SQLCODE -482 he procedure returned no locators
SQLCODE -501 Cursor not open on FETCH
SQLCODE -502 Opening cursor that is already open
SQLCODE -503 Updating column which needs to be specified in FOR UPDATE OF
SQLCODE -530 SQLSTATE 23503
Referential integrity prevents the INSERT/UPDATE
SQLCODE -532 SQLSTATE 23504
Referential integrity (DELETE RESTRICT rule)
prevents the DELETE
SQLCODE -536 SQLSTATE 42914
Referential integrity (DELETE RESTRICT rule)
prevents the DELETE
62
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE -545 SQLSTATE 23513
Check constraint prevents the INSERT/UPDATE
SQLCODE -747 The table specified is not available
because tables and/or indexes need to be created.
SQLCODE +802 The null indicator was set to -2
because an arithmetic statement didn't work.
SQLCODE -803 SQLSTATE 23505
Duplicate key on insert or update
SQLCODE -805
DBRM or package not found in plan
Is plan name correct?
SQLCODE -811 More than one row retrieved in SELECT INTO
SQLCODE -818 Plan and program: timestamp mismatch
SQLCODE -904 SQLSTATE 57011
Unavailable resource. Someone is locking the data you need
you may choose to terminate the program
SQLCODE -911 SQLSTATE 40000
Deadlock or timeout. Rollback has been done.
SQLCODE -913 SQLSTATE 40502
Your program was the victim of a deadlock or timeout.
NO rollback has been done.
You should do a ROLLBACK.
SQLCODE -922 Authorization needed
SQLCODE -927 The language interface was called but no connection had been
***************************************************************************************
SQLCODE -991, Error: CALL ATTACH WAS UNABLE TO ESTABLISH AN IMPLICIT CONNECT OR OPEN
TO DB2. RC1= RC2=
SQLCODE -981, Error: THE SQL STATEMENT FAILED BECAUSE THE RRSAF CONNECTION IS NOT IN
A STATE THAT ALLOWS SQL OPERATIONS, REASON
SQLCODE -950, Error: THE LOCATION NAME SPECIFIED IN THE CONNECT STATEMENT IS INVALID
OR NOT LISTED IN THE COMMUNICATIONS DATABASE
SQLCODE
-948, Error: DISTRIBUTED OPERATION IS INVALID
SQLCODE -947, Error: THE SQL STATEMENT FAILED BECAUSE IT WILL CHANGE A TABLE DEFINED
WITH DATA CAPTURE
CHANGES, BUT THE DATA CANNOT BE PROPAGATED
SQLCODE
-939, Error: ROLLBACK REQUIRED DUE TO UNREQUESTED ROLLBACK OF A REMOTE SERVER
SQLCODE
-929, Error: FAILURE IN A CHANGED DATA CAPTURE EXIT:
SQLCODE -927, Error: THE LANGUAGE INTERFACE (LI) WAS CALLED WHEN THE CONNECTING
ENVIRONMENT WAS NOT
ESTABLISHED. THE PROGRAM SHOULD BE INVOKED UNDER THE DSN COMMAND
SQLCODE
-926, Error: ROLLBACK NOT VALID IN IMS OR CICS ENVIRONMENT
SQLCODE
-925, Error: COMMIT NOT VALID IN IMS OR CICS ENVIRONMENT
SQLCODE
-924, Error: DB2 CONNECTION INTERNAL ERROR, , ,
SQLCODE
-923, Error: CONNECTION NOT ESTABLISHED: DB2 , REASON , TYPE , NAME
SQLCODE
-922, Error: AUTHORIZATION FAILURE:
SQLCODE
-919, Error: A ROLLBACK OPERATION IS REQUIRED
ERROR. REASON
63
Software Factory
Cáceres –
SQLCODE
BEEN LOST
SQLCODE
Rafael Campillo Lorenzo.
-918, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE A CONNECTION HAS
-917, Error: BIND PACKAGE FAILED
SQLCODE -913, Error: UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON
CODE , TYPE OF RESOURCE , AND RESOURCE NAME
SQLCODE -911, Error: THE CURRENT UNIT OF WORK HAS BEEN ROLLED BACK DUE TO DEADLOCK OR
TIMEOUT. REASON ,
TYPE OF RESOURCE , AND RESOURCE NAME
SQLCODE -910, Error: THE SQL STATEMENT CANNOT ACCESS AN OBJECT ON WHICH A DROP OR
ALTER IS PENDING
SQLCODE
-909, Error: THE OBJECT HAS BEEN DELETED OR ALTERED
SQLCODE -908, Error:
IS NOT ALLOWED
ERROR USING
AUTHORITY.
BIND, REBIND, OR AUTO-REBIND OPERATION
SQLCODE -906, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THIS FUNCTION IS
DISABLED DUE TO A PRIOR ERROR
SQLCODE -905, Error: UNSUCCESSFUL EXECUTION DUE TO RESOURCE LIMIT BEING EXCEEDED,
RESOURCE NAME = LIMIT =
CPU SECONDS ( SERVICE UNITS) DERIVED FROM
SQLCODE -904, Error: UNSUCCESSFUL EXECUTION CAUSED BY AN UNAVAILABLE RESOURCE. REASON
, TYPE OF RESOURCE , AND RESOURCE NAME
SQLCODE
REQUIRED
-902, Error: POINTER TO ESSENTIAL CONTROL BLOCK(RDA/CT) HAS VALUE 0, REBIND
SQLCODE -901, Error: UNSUCCESSFUL EXECUTION CAUSED BY A SYSTEM ERROR THAT DOES NOT
PRECLUDE THE SUCCESSFUL
EXECUTION OF SUBSEQUENT SQL STATEMENTS
SQLCODE -900, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THE APPLICATION
PROCESS IS NOT CONNECTED
TO AN APPLICATION SERVER
SQLCODE
-882, Error: SAVEPOINT DOES NOT EXIST
SQLCODE -881, Error: A SAVEPOINT WITH NAME
CANNOT BE REUSED
SQLCODE
-880, Error: SAVEPOINT
ALREADY EXISTS, BUT THIS SAVEPOINT NAME
DOES NOT EXIST OR IS INVALID IN THIS CONTEXT
SQLCODE -879, Error: CREATE OR ALTER STATEMENT FOR CANNOT DEFINE A COLUMN, DISTINCT
TYPE, FUNCTION OR
STORED PROCEDURE PARAMETER AS MIXED OR GRAPHIC WITH ENCODING SCHEME
SQLCODE
-878, Error: THE PLAN_TABLE USED FOR EXPLAIN CANNOT BE ASCII
SQLCODE
-877, Error: CCSID ASCII IS NOT ALLOWED FOR THIS DATABASE OR TABLE SPACE
SQLCODE
-876, Error:
CANNOT BE CREATED, REASON
SQLCODE
-875, Error:
CANNOT BE USED WITH THE ASCII DATA REFERENCED
SQLCODE -874, Error: THE ENCODING SCHEME SPECIFIED FOR THE
CONTAINING TABLE SPACE OR OTHER PARAMETERS
MUST BE THE SAME AS THE
SQLCODE -873, Error: DATA ENCODED WITH DIFFERENT CCSIDS CANNOT BE REFERENCED IN THE
SAME SQL STATEMENT
SQLCODE
-872, Error: A VALID CCSID HAS NOT YET BEEN SPECIFIED FOR THIS SUBSYSTEM
SQLCODE -870, Error: THE NUMBER OF HOST VARIABLES IN THE STATEMENT IS NOT EQUAL TO
THE NUMBER OF DESCRIPTORS
SQLCODE
-867, Error: INVALID SPECIFICATION OF A ROWID COLUMN
64
Software Factory
Cáceres –
SQLCODE
Rafael Campillo Lorenzo.
-846, Error: INVALID SPECIFICATION OF AN IDENTITY COLUMN
SQLCODE -843, Error: THE SET CONNECTION OR RELEASE STATEMENT MUST SPECIFY AN EXISTING
CONNECTION
SQLCODE
-842, Error: A CONNECTION TO x ALREADY EXISTS
SQLCODE
-840, Error: TOO MANY ITEMS RETURNED IN A SELECT OR INSERT LIST
SQLCODE
ADDRESS
-822, Error: THE SQLDA CONTAINS AN INVALID DATA ADDRESS OR INDICATOR VARIABLE
SQLCODE -820, Error: THE SQL STATEMENT CANNOT BE PROCESSED BECAUSE
THAT IS NOT VALID IN THIS RELEASE
CONTAINS A VALUE
SQLCODE -819, Error: THE VIEW CANNOT BE PROCESSED BECAUSE THE LENGTH OF ITS PARSE
TREE IN THE CATALOG IS ZERO
SQLCODE -818, Error: THE PRECOMPILER-GENERATED TIMESTAMP
DIFFERENT FROM THE BIND
TIMESTAMP BUILT FROM THE DBRM
IN THE LOAD MODULE IS
SQLCODE -817, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THE STATEMENT WILL
RESULT IN A PROHIBITED UPDATE OPERATION
SQLCODE -815, Error: A GROUP BY OR HAVING CLAUSE IS IMPLICITLY OR EXPLICITLY
SPECIFIED IN A SUBSELECT OF A
BASIC PREDICATE OR A SET CLAUSE OF AN UPDATE STATEMENT
SQLCODE -812, Error: THE SQL STATEMENT CANNOT BE PROCESSED BECAUSE A BLANK
COLLECTION-ID WAS FOUND IN THE CURRENT
PACKAGESET SPECIAL REGISTER WHILE TRYING TO FORM A QUALIFIED PACKAGE NAME FOR PROGRAM
USING PLAN
SQLCODE -811, Error: THE RESULT OF AN EMBEDDED SELECT STATEMENT OR A SUBSELECT IN THE
SET CLAUSE OF AN
UPDATE STATEMENT IS A TABLE OF MORE THAN ONE ROW, OR THE RESULT OF A SUBQUERY OF A BASIC
PREDICATE IS MORE THAN VALUE
SQLCODE
STATEMENT
-808, Error: THE CONNECT STATEMENT IS NOT CONSISTENT WITH THE FIRST CONNECT
SQLCODE
-807, Error: ACCESS DENIED: PACKAGE
SQLCODE
-805, Error: DBRM OR PACKAGE NAME
IS NOT ENABLED FOR ACCESS FROM
NOT FOUND IN PLAN . REASON
SQLCODE -804, Error: AN ERROR WAS FOUND IN THE APPLICATION PROGRAM INPUT PARAMETERS
FOR THE SQL STATEMENT, REASON
SQLCODE -803, Error: AN INSERTED OR UPDATED VALUE IS INVALID BECAUSE INDEX IN INDEX
SPACE CONSTRAINS
COLUMNS OF THE TABLE SO NO TWO ROWS CAN CONTAIN DUPLICATE VALUES IN THOSE COLUMNS. RID
OF EXISTING ROW IS X''
SQLCODE
POSITION
-802, Error: EXCEPTION ERROR
HAS OCCURRED DURING
OPERATION ON
DATA,
SQLCODE -798, Error: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE
OPTION GENERATED ALWAYS. COLUMN NAME
SQLCODE
STATEMENT
SQLCODE
SQLCODE
COLUMN
-797, Error: ATTEMPT TO CREATE TRIGGER
WITH AN UNSUPPORTED TRIGGERED SQL
-771, Error: INVALID SPECIFICATION OF A ROWID COLUMN
-770, Error: TABLE
CANNOT HAVE A LOB COLUMN UNLESS IT ALSO HAS A ROWID
SQLCODE -769, Error: SPECIFICATION OF CREATE AUX TABLE DOES NOT MATCH THE
CHARACTERISTICS OF THE BASE TABLE
SQLCODE
PARTITION
-768, Error: AN AUXILIARY TABLE ALREADY EXISTS FOR THE SPECIFIED COLUMN OR
65
Software Factory
Cáceres –
SQLCODE
Rafael Campillo Lorenzo.
-767, Error: MISSING OR INVALID COLUMN SPECIFICATION FOR INDEX
SQLCODE -766, Error: THE OBJECT OF A STATEMENT IS AN AUXILIARY TABLE FOR WHICH THE
REQUESTED OPERATION IS NOT PERMITTED
SQLCODE
-765, Error: TABLE IS NOT COMPATIBLE WITH DATABASE
SQLCODE -764, Error: A LOB TABLE SPACE AND ITS ASSOCIATED BASE TABLE SPACE MUST BE IN
THE SAME DATABASE
SQLCODE
-763, Error: INVALID TABLE SPACE NAME
SQLCODE -752, Error: THE CONNECT STATEMENT IS INVALID BECAUSE THE PROCESS IS NOT IN
THE CONNECTABLE STATE
SQLCODE -751, Error: (SPECIFIC NAME ) ATTEMPTED TO EXECUTE AN SQL STATEMENT
NOT ALLOWED
SQLCODE -750, Error: THE SOURCE TABLE
EXISTING VIEW
DEFINITIONS OR TRIGGER DEFINITIONS
SQLCODE
THAT IS
CANNOT BE RENAMED BECAUSE IT IS REFERENCED IN
-748, Error: AN INDEX ALREADY EXISTS ON AUXILIARY TABLE
SQLCODE -747, Error: TABLE IS NOT AVAILABLE UNTIL THE AUXILIARY TABLES AND INDEXES
FOR ITS EXTERNALLY
STORED COLUMNS HAVE BEEN CREATED
SQLCODE -746, Error: THE SQL STATEMENT IN AN EXTERNAL FUNCTION, TRIGGER, OR IN STORED
PROCEDURE VIOLATES
THE NESTING SQL RESTRICTION
SQLCODE
-742, Error: DSNDB07 IS THE IMPLICIT WORK FILE DATABASE
SQLCODE
-741, Error: A
DATABASE IS ALREADY DEFINED FOR MEMBER
SQLCODE -740, Error: FUNCTION
NOT VALID IN THE
CONTEXT IN WHICH IT WAS INVOKED
IS DEFINED WITH THE OPTION MODIFIES SQL DATA WHICH IS
SQLCODE -739, Error: ALTER FUNCTION
THEY ARE PROCESSED IN PARALLEL
FAILED BECAUSE FUNCTIONS CANNOT MODIFY DATA WHEN
SQLCODE
-737, Error: IMPLICIT TABLE SPACE NOT ALLOWED
SQLCODE
-736, Error: INVALID OBID
SQLCODE
DATABASE
-735, Error: DATABASE
SPECIFIED
CANNOT BE ACCESSED BECAUSE IT IS NO LONGER A SHARED
SQLCODE -734, Error: THE ROSHARE ATTRIBUTE OF A DATABASE CANNOT BE ALTERED FROM
ROSHARE READ
SQLCODE -733, Error: THE DESCRIPTION OF A TABLE SPACE, INDEX SPACE, OR TABLE IN A
ROSHARE READ DATABASE
MUST BE CONSISTENT WITH ITS DESCRIPTION IN THE OWNER SYSTEM
SQLCODE -732, Error: THE DATABASE IS DEFINED ON THIS SUBSYSTEM WITH THE ROSHARE READ
ATTRIBUTE BUT THE
TABLE SPACE OR INDEX SPACE HAS NOT BEEN DEFINED ON THE OWNING SUBSYSTEM
SQLCODE
-731, Error: USER-DEFINED DATASET
MUST BE DEFINED WITH SHAREOPTIONS (1,3)
SQLCODE -730, Error: THE PARENT OF A TABLE IN A READ-ONLY SHARED DATABASE MUST ALSO
BE A TABLE IN A
READ-ONLY SHARED DATABASE
SQLCODE -729, Error: A STORED PROCEDURE SPECIFYING COMMIT ON RETURN CANNOT BE THE
TARGET OF A NESTED CALL STATEMENT
SQLCODE
-728, Error: DATA TYPE
SQLCODE -726, Error:
OR DISABLE ENTRIES
IS NOT ALLOWED IN DB2 PRIVATE PROTOCOL PROCESSING
BIND ERROR ATTEMPTING TO REPLACE PACKAGE = .
THERE ARE ENABLE
66
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
CURRENTLY ASSOCIATED WITH THE PACKAGE
SQLCODE
-725, Error: THE SPECIAL REGISTER
SQLCODE -724, Error: THE ACTIVATION OF THE
INDIRECT SQL CASCADING
AT LOCATION
OBJECT
WAS SUPPLIED AN INVALID VALUE
WOULD EXCEED THE MAXIMUM LEVEL OF
SQLCODE -723, Error: AN ERROR OCCURRED IN A TRIGGERED SQL STATEMENT IN TRIGGER ,
SECTION NUMBER .
INFORMATION RETURNED: SQLCODE , SQLSTATE , AND MESSAGE TOKENS
SQLCODE
-722, Error: ERROR USING
AUTHORITY PACKAGE DOES NOT EXIST
SQLCODE -721, Error: BIND ERROR FOR PACKAGE =
CANNOT BE CREATED
CONTOKEN = ''X IS NOT UNIQUE SO IT
SQLCODE -720, Error: BIND ERROR, ATTEMPTING TO REPLACE PACKAGE =
THIS VERSION ALREADY EXISTS
SQLCODE
-719, Error: BIND ADD ERROR USING
SQLCODE
-718, Error: REBIND OF PACKAGE
AUTHORITY PACKAGE
-716, Error: PROGRAM
BUT
ALREADY EXISTS
FAILED BECAUSE IBMREQD OF
SQLCODE -717, Error: FOR WITH MARK FAILED BECAUSE
RELEASE FROM WHICH FALLBACK HAS OCCURRED
SQLCODE
WITH VERSION =
IS INVALID
DEPENDS ON FUNCTIONS OF THE
PRECOMPILED WITH INCORRECT LEVEL FOR THIS RELEASE
SQLCODE -715, Error: PROGRAM WITH MARK FAILED BECAUSE IT DEPENDS ON FUNCTIONS OF
THE RELEASE FROM WHICH FALLBACK HAS OCCURRED
SQLCODE
-713, Error: THE REPLACEMENT VALUE
FOR
IS INVALID
SQLCODE -697, Error: OLD OR NEW CORRELATION NAMES ARE NOT ALLOWED IN A TRIGGER
DEFINED WITH THE FOR EACH
STATEMENT CLAUSE. OLD_TABLE OR NEW_TABLE NAMES ARE NOT ALLOWED IN A TRIGGER WITH THE
BEFORE CLAUSE
SQLCODE -696, Error: THE DEFINITION OF TRIGGER INCLUDES AN INVALID USE OF
CORRELATION NAME OR TRANSITION TABLE NAME . REASON CODE=
SQLCODE -694, Error: THE DDL STATEMENT CANNOT BE EXECUTED BECAUSE A DROP IS PENDING
ON THE DDL REGISTRATION TABLE
SQLCODE
PROPERLY
-693, Error: THE COLUMN
SQLCODE
EXIST
-692, Error: THE REQUIRED UNIQUE INDEX
SQLCODE
SQLCODE
REASON
IN DDL REGISTRATION TABLE OR INDEX
IS NOT DEFINED
FOR DDL REGISTRATION TABLE
-691, Error: THE REQUIRED REGISTRATION TABLE
DOES NOT
DOES NOT EXIST
-690, Error: THE STATEMENT IS REJECTED BY DATA DEFINITION CONTROL SUPPORT.
SQLCODE
-689, Error: TOO MANY COLUMNS DEFINED FOR A DEPENDENT TABLE
SQLCODE
-688, Error: INCORRECT DATA RETURNED FROM FIELD PROCEDURE, ,
SQLCODE
-687, Error: FIELD TYPES INCOMPARABLE
SQLCODE -686, Error: COLUMN DEFINED WITH A FIELD PROCEDURE CAN NOT COMPARE WITH
ANOTHER COLUMN WITH
DIFFERENT FIELD PROCEDURE
SQLCODE
-685, Error: INVALID FIELD TYPE,
SQLCODE
-684, Error: THE LENGTH OF LITERAL LIST BEGINNING
SQLCODE
PROCEDURE
SQLCODE
IS TOO LONG
-683, Error: THE SPECIFICATION FOR COLUMN, DISTINCT TYPE, FUNCTION, OR
CONTAINS INCOMPATIBLE CLAUSES
-682, Error: FIELD PROCEDURE
COULD NOT BE LOADED
67
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE -681, Error: COLUMN
RT: , RS: , MSG:
SQLCODE
SQLCODE
OBJECT
IN VIOLATION OF INSTALLATION DEFINED FIELD PROCEDURE
-680, Error: TOO MANY COLUMNS SPECIFIED FOR A TABLE, VIEW, OR TABLE FUNCTION
-679, Error: THE OBJECT
CANNOT BE CREATED BECAUSE A DROP IS PENDING ON THE
SQLCODE -678, Error: THE LITERAL SPECIFIED FOR THE INDEX LIMIT KEY MUST CONFORM TO
THE DATA TYPE OF THE CORRESPONDING COLUMN
SQLCODE
-677, Error: INSUFFICIENT VIRTUAL STORAGE FOR BUFFERPOOL EXPANSION
SQLCODE
-676, Error: ONLY A 4K PAGE BUFFERPOOL CAN BE USED FOR AN INDEX
SQLCODE
-672, Error: OPERATION DROP NOT ALLOWED ON TABLE
SQLCODE -671, Error: THE BUFFERPOOL ATTRIBUTE OF THE TABLE SPACE CANNOT BE ALTERED AS
SPECIFIED BECAUSE IT
WOULD CHANGE THE PAGE SIZE OF THE TABLE SPACE
SQLCODE
SQLCODE
DROPPED
-670, Error: THE RECORD LENGTH OF THE TABLE EXCEEDS THE PAGE SIZE LIMIT
-669, Error: A TABLE IN A PARTITIONED TABLE SPACE CANNOT BE EXPLICITLY
SQLCODE -668, Error: THE COLUMN CANNOT BE ADDED TO THE TABLE BECAUSE THE TABLE HAS AN
EDIT PROCEDURE
SQLCODE -667, Error: THE CLUSTERING INDEX FOR A PARTITIONED TABLE SPACE CANNOT BE
EXPLICITLY DROPPED
SQLCODE
-666, Error: CANNOT BE EXECUTED BECAUSE
IS IN PROGRESS
SQLCODE
-665, Error: THE PART CLAUSE OF AN ALTER STATEMENT IS OMITTED OR INVALID
SQLCODE -663, Error: THE NUMBER OF KEY LIMIT VALUES IS EITHER ZERO, OR GREATER THAN
THE NUMBER OF COLUMNS IN THE KEY OF INDEX
SQLCODE
SPACE
-662, Error: A PARTITIONED INDEX CANNOT BE CREATED ON A NON-PARTITIONED TABLE
SQLCODE -661, Error: INDEX CANNOT BE CREATED ON PARTITIONED TABLE SPACE
NUMBER OF PART
SPECIFICATIONS IS NOT EQUAL TO THE NUMBER OF PARTITIONS OF THE TABLE SPACE
SQLCODE -660, Error: INDEX
KEY LIMITS ARE NOT SPECIFIED
SQLCODE
-658, Error: A
BECAUSE THE
CANNOT BE CREATED ON PARTITIONED TABLE SPACE x BECAUSE
CANNOT BE DROPPED USING THE
STATEMENT
SQLCODE -655, Error: THE CREATE OR ALTER STOGROUP IS INVALID BECAUSE THE STORAGE
GROUP WOULD HAVE BOTH
SPECIFIC AND NON-SPECIFIC VOLUME IDS
SQLCODE -653, Error: TABLE IN PARTITIONED TABLE SPACE
PARTITIONED INDEX HAS NOT BEEN CREATED
IS NOT AVAILABLE BECAUSE ITS
SQLCODE
-652, Error: VIOLATION OF INSTALLATION DEFINED EDIT OR VALIDATION PROCEDURE
SQLCODE
-651, Error: TABLE DESCRIPTION EXCEEDS MAXIMUM SIZE OF OBJECT DESCRIPTOR
SQLCODE
-650, Error: THE ALTER INDEX CANNOT BE EXECUTED, REASON
SQLCODE
ACTIVATED
-647, Error: BUFFERPOOL
SQLCODE -646, Error: TABLE
ALREADY CONTAINS A TABLE
CANNOT BE SPECIFIED BECAUSE IT HAS NOT BEEN
CANNOT BE CREATED IN SPECIFIED TABLE SPACE
SQLCODE
-644, Error: INVALID VALUE SPECIFIED FOR KEYWORD
IN
SQLCODE
-643, Error: CHECK CONSTRAINT EXCEEDS MAXIMUM ALLOWABLE LENGTH
BECAUSE IT
STATEMENT
68
Software Factory
Cáceres –
SQLCODE
Rafael Campillo Lorenzo.
-642, Error: TOO MANY COLUMNS IN UNIQUE CONSTRAINTS
SQLCODE -640, Error: LOCKSIZE ROW CANNOT BE SPECIFIED BECAUSE TABLE IN THIS
TABLESPACE HAS TYPE 1 INDEX
SQLCODE -639, Error: A NULLABLE COLUMN OF A FOREIGN KEY WITH A DELETE RULE OF SET
NULL CANNOT BE A COLUMN
OF THE KEY OF A PARTITIONED INDEX
SQLCODE
-638, Error: TABLE
CANNOT BE CREATED BECAUSE COLUMN DEFINITION IS MISSING
SQLCODE
-637, Error: DUPLICATE
KEYWORD
SQLCODE -636, Error: THE PARTITIONING KEYS FOR PARTITION
ASCENDING OR DESCENDING ORDER
ARE NOT SPECIFIED IN
SQLCODE
-635, Error: THE DELETE RULES CANNOT BE DIFFERENT OR CANNOT BE SET NULL
SQLCODE
-634, Error: THE DELETE RULE MUST NOT BE CASCADE
SQLCODE
-633, Error: THE DELETE RULE MUST BE
SQLCODE -632, Error: THE TABLE CANNOT BE DEFINED AS A DEPENDENT OF
RULE RESTRICTIONS
BECAUSE OF DELETE
SQLCODE
-631, Error: FOREIGN KEY
IS TOO LONG OR HAS TOO MANY COLUMNS
SQLCODE
-630, Error: THE WHERE NOT NULL SPECIFICATION IS INVALID FOR TYPE 1 INDEXES
SQLCODE -629, Error: SET NULL CANNOT BE SPECIFIED BECAUSE FOREIGN KEY
NULL VALUES
SQLCODE
CANNOT CONTAIN
-628, Error: THE CLAUSES ARE MUTUALLY EXCLUSIVE
SQLCODE -627, Error: THE ALTER STATEMENT IS INVALID BECAUSE THE PAGESET HAS USERMANAGED DATA SETS
SQLCODE -626, Error: THE ALTER STATEMENT IS NOT EXECUTABLE BECAUSE THE PAGE SET IS
NOT STOPPED
SQLCODE -625, Error: TABLE
PARENT KEY
DOES NOT HAVE AN INDEX TO ENFORCE THE UNIQUENESS OF THE
SQLCODE
-624, Error: TABLE
SQLCODE
-623, Error: A CLUSTERING INDEX ALREADY EXISTS ON TABLE
SQLCODE
IS NO
SQLCODE
ALREADY HAS A PRIMARY KEY
-622, Error: FOR MIXED DATA IS INVALID BECAUSE THE MIXED DATA INSTALL OPTION
-621, Error: DUPLICATE DBID
IN
WAS DETECTED AND PREVIOUSLY ASSIGNED TO
SQLCODE
DATABASE
-620, Error: KEYWORD
STATEMENT IS NOT PERMITTED FOR A
SQLCODE
STOPPED
-619, Error: OPERATION DISALLOWED BECAUSE THE WORK FILE DATABASE IS NOT
SQLCODE
-618, Error: OPERATION
SQLCODE
-617, Error: A TYPE 1 INDEX IS NOT VALID FOR TABLE
SQLCODE
-616, Error: CANNOT BE DROPPED BECAUSE IT IS REFERENCED BY
SQLCODE
-615, Error: IS NOT ALLOWED ON A PACKAGE IN USE
SPACE IN THE
IS NOT ALLOWED ON SYSTEM DATABASES
SQLCODE -614, Error: THE INDEX CANNOT BE CREATED OR THE LENGTH OF THE COLUMN CANNOT
BE CHANGED BECAUSE THE
SUM OF THE INTERNAL LENGTHS OF THE IDENTIFIED COLUMNS IS GREATER THAN THE ALLOWABLE
MAXIMUM
SQLCODE -613, Error: THE PRIMARY KEY OR A UNIQUE CONSTRAINT IS TOO LONG OR HAS TOO
MANY COLUMNS
69
Software Factory
Cáceres –
SQLCODE
Rafael Campillo Lorenzo.
-612, Error: IS A DUPLICATE COLUMN NAME
SQLCODE -611, Error: ONLY LOCKMAX 0 CAN BE SPECIFIED WHEN THE LOCK SIZE OF THE
TABLESPACE IS TABLESPACE OR TABLE
SQLCODE
-607, Error: OPERATION OR OPTION
IS NOT DEFINED FOR THIS OBJECT
SQLCODE -604, Error: A DATA TYPE DEFINITION SPECIFIES AN INVALID LENGTH, PRECISION,
OR SCALE ATTRIBUTE
SQLCODE -603, Error: A UNIQUE INDEX CANNOT BE CREATED BECAUSE THE TABLE CONTAINS ROWS
WHICH ARE DUPLICATES
WITH RESPECT TO THE VALUES OF THE IDENTIFIED COLUMNS
SQLCODE
-602, Error: TOO MANY COLUMNS SPECIFIED IN A CREATE INDEX
SQLCODE -601, Error: THE NAME OF THE OBJECT TO BE CREATED OR THE TARGET OF A RENAME
STATEMENT IS IDENTICAL
TO THE EXISTING NAME OF THE OBJECT TYPE
SQLCODE
-594, Error: ATTEMPT TO CREATE A NULLABLE ROWID OR DISTINCT TYPE COLUMN
SQLCODE
-593, Error: NOT NULL MUST BE SPECIFIED FOR ROWID OR DISTINCT TYPE COLUMN
SQLCODE -592, Error: NOT AUTHORIZED TO CREATE FUNCTIONS OR PROCEDURES IN WLM
ENVIRONMENT
SQLCODE
-590, Error: PARAMETER NAME
IS NOT UNIQUE IN THE CREATE FOR ROUTINE
SQLCODE -586, Error: THE TOTAL LENGTH OF THE CURRENT PATH SPECIAL REGISTER CANNOT
EXCEED 254 CHARACTERS
SQLCODE
PATH
-585, Error: THE SCHEMA NAME
CANNOT APPEAR MORE THAN ONCE IN THE CURRENT
SQLCODE -582, Error: THE SEARCH-CONDITION IN A SEARCHED-WHEN-CLAUSE CANNOT BE A
QUANTIFIED PREDICATE, IN
PREDICATE, OR AN EXISTS PREDICATE
SQLCODE -581, Error: THE DATA TYPES OF THE RESULT-EXPRESSIONS OF A CASE EXPRESSION
ARE NOT COMPATIBLE
SQLCODE
-580, Error: THE RESULT-EXPRESSIONS OF A CASE EXPRESSION CANNOT ALL BE NULL
SQLCODE -579, Error:
ATTEMPTED TO READ DATA WHEN THE DEFINITION OF THE FUNCTION OR
PROCEDURE DID NOT SPECIFY THIS ACTION
SQLCODE -577, Error:
ATTEMPTED TO MODIFY DATA WHEN THE DEFINITION OF THE FUNCTION
OR PROCEDURE DID NOT SPECIFY THIS ACTION
SQLCODE -574, Error: THE SPECIFIED DEFAULT VALUE OR IDENTITY ATTRIBUTE VALUE
CONFLICTS WITH THE DEFINITION OF COLUMN
SQLCODE
NAMES
-573, Error: TABLE
DOES NOT HAVE A UNIQUE KEY WITH THE SPECIFIED COLUMN
SQLCODE
-571, Error: THE STATEMENT WOULD RESULT IN A MULTIPLE SITE UPDATE
SQLCODE
-567, Error:
SQLCODE
-559, Error: ALL AUTHORIZATION FUNCTIONS HAVE BEEN DISABLED
SQLCODE
-558, Error: INVALID CLAUSE OR COMBINATION OF CLAUSES ON A GRANT OR REVOKE
SQLCODE
-557, Error: INCONSISTENT GRANT/REVOKE KEYWORD .
AUTHORIZATION ERROR USING
AUTHORITY PACKAGE =
PRIVILEGE =
PERMITTED KEYWORDS ARE
SQLCODE -556, Error: CANNOT HAVE THE PRIVILEGE REVOKED BY
NOT POSSESS THE
PRIVILEGE OR THE REVOKER DID NOT MAKE THE GRANT
BECAUSE THE REVOKEE DOES
SQLCODE
-555, Error: AN AUTHORIZATION ID CANNOT REVOKE A PRIVILEGE FROM ITSELF
SQLCODE
-554, Error: AN AUTHORIZATION ID CANNOT GRANT A PRIVILEGE TO ITSELF
70
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE
-553, Error:
SPECIFIED IS NOT ONE OF THE VALID AUTHORIZATION IDS
SQLCODE
-552, Error:
DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION
SQLCODE
-551, Error:
DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION
SQLCODE -549, Error: THE STATEMENT IS NOT ALLOWED FOR
DYNAMICRULES(RUN) IS NOT IN EFFECT FOR
ON OBJECT
BECAUSE THE BIND OPTION
SQLCODE
-548, Error: A CHECK CONSTRAINT THAT IS DEFINED WITH
SQLCODE
-546, Error: THE CHECK CONSTRAINT
IS INVALID
IS INVALID
SQLCODE -545, Error: THE REQUESTED OPERATION IS NOT ALLOWED BECAUSE A ROW DOES NOT
SATISFY THE CHECK CONSTRAINT
SQLCODE -544, Error: THE CHECK CONSTRAINT SPECIFIED IN THE ALTER TABLE STATEMENT
CANNOT BE ADDED BECAUSE AN
EXISTING ROW VIOLATES THE CHECK CONSTRAINT
SQLCODE -543, Error: A ROW IN A PARENT TABLE CANNOT BE DELETED BECAUSE THE CHECK
CONSTRAINT RESTRICTS THE DELETION
SQLCODE -542, Error: CANNOT BE A COLUMN OF A PRIMARY KEY, A UNIQUE CONSTRAINT, OR A
PARENT KEY BECAUSE IT CAN CONTAIN NULL VALUES
SQLCODE -540, Error: THE DEFINITION OF TABLE
PRIMARY INDEX OR A REQUIRED UNIQUE INDEX
SQLCODE
SQLCODE
OF TABLE
-539, Error: TABLE
IS INCOMPLETE BECAUSE IT LACKS A
DOES NOT HAVE A PRIMARY KEY
-538, Error: FOREIGN KEY
DOES NOT CONFORM TO THE DESCRIPTION OF A PARENT KEY
SQLCODE -537, Error: THE PRIMARY KEY CLAUSE, A FOREIGN KEY CLAUSE, OR A UNIQUE CLAUSE
IDENTIFIES COLUMN MORE THAN ONCE
SQLCODE -536, Error: THE DELETE STATEMENT IS INVALID BECAUSE TABLE
BY THE OPERATION
CAN BE AFFECTED
SQLCODE
-534, Error: THE PRIMARY KEY CANNOT BE UPDATED BECAUSE OF MULTIPLE-ROW UPDATE
SQLCODE
-533, Error: INVALID MULTIPLE-ROW INSERT
SQLCODE
-532, Error: THE RELATIONSHIP
RESTRICTS THE DELETION OF ROW WITH RID X''
SQLCODE -531, Error: PARENT KEY IN A PARENT ROW CANNOT BE UPDATED BECAUSE IT HAS ONE
OR MORE DEPENDENT ROWS IN RELATIONSHIP
SQLCODE
SQLCODE
TABLE
-530, Error: THE INSERT OR UPDATE VALUE OF FOREIGN KEY
IS INVALID
-526, Error: THE REQUESTED OPERATION OR USAGE DOES NOT APPLY TO
TEMPORARY
SQLCODE -525, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE IT WAS IN ERROR AT
BIND TIME FOR SECTION
= PACKAGE = CONSISTENCY TOKEN = X''
SQLCODE -519, Error: THE PREPARE STATEMENT IDENTIFIES THE SELECT STATEMENT OF THE
OPENED CURSOR
SQLCODE
STATEMENT
-518, Error: THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED
SQLCODE -517, Error: CURSOR CANNOT BE USED BECAUSE ITS STATEMENT NAME DOES NOT
IDENTIFY A PREPARED SELECT STATEMENT
SQLCODE
STATEMENT
-516, Error: THE DESCRIBE FOR STATIC STATEMENT DOES NOT IDENTIFY A PREPARED
SQLCODE
-514, Error: THE CURSOR
SQLCODE
-513, Error: THE ALIAS
IS NOT IN A PREPARED STATE
MUST NOT BE DEFINED ON ANOTHER LOCAL OR REMOTE ALIAS
71
Software Factory
Cáceres –
SQLCODE
Rafael Campillo Lorenzo.
-512, Error: STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID
SQLCODE -511, Error: THE FOR UPDATE CLAUSE CANNOT BE SPECIFIED BECAUSE THE TABLE
DESIGNATED BY THE CURSOR CANNOT BE MODIFIED
SQLCODE -510, Error: THE TABLE DESIGNATED BY THE CURSOR OF THE UPDATE OR DELETE
STATEMENT CANNOT BE MODIFIED
SQLCODE -509, Error: THE TABLE IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT
THE SAME TABLE
DESIGNATED BY THE CURSOR
SQLCODE -508, Error: THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT
POSITIONED ON A ROW
SQLCODE
OPEN
SQLCODE
-507, Error: THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT
-504, Error: THE CURSOR NAME
IS NOT DEFINED
SQLCODE -503, Error: A COLUMN CANNOT BE UPDATED BECAUSE IT IS NOT IDENTIFIED IN THE
UPDATE CLAUSE OF THE
SELECT STATEMENT OF THE CURSOR
SQLCODE
-502, Error: THE CURSOR IDENTIFIED IN AN OPEN STATEMENT IS ALREADY OPEN
SQLCODE
-501, Error: THE CURSOR IDENTIFIED IN A FETCH OR CLOSE STATEMENT IS NOT OPEN
SQLCODE
DESTROYED
-500, Error: THE IDENTIFIED CURSOR WAS CLOSED WHEN THE CONNECTION WAS
SQLCODE -499, Error: CURSOR
FROM PROCEDURE
SQLCODE
DATABASE
HAS ALREADY BEEN ASSIGNED TO THIS OR ANOTHER RESULT SET
-497, Error: THE MAXIMUM LIMIT OF INTERNAL IDENTIFIERS HAS BEEN EXCEEDED FOR
SQLCODE -496, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE IT REFERENCES A
RESULT SET THAT WAS NOT
CREATED BY THE CURRENT SERVER
SQLCODE -495, Error: ESTIMATED PROCESSOR COST OF PROCESSOR SECONDS ( SERVICE UNITS)
IN COST CATEGORY
EXCEEDS A RESOURCE LIMIT ERROR THRESHOLD OF SERVICE UNITS
SQLCODE -492, Error: THE CREATE FUNCTION FOR
IT MAY INVOLVE A
MISMATCH WITH A SOURCE FUNCTION
HAS A PROBLEM WITH PARAMETER NUMBER .
SQLCODE -491, Error: CREATE STATEMENT FOR USER-DEFINED FUNCTION MUST HAVE A RETURNS
CLAUSE, AND EITHER THE
EXTERNAL CLAUSE (WITH OTHER REQUIRED KEYWORDS) OR THE SOURCE CLAUSE
SQLCODE -490, Error: NUMBER
RANGE OF ALLOWABLE
VALUES IN THIS CONTEXT (, )
DIRECTLY SPECIFIED IN AN SQL STATEMENT IS OUTSIDE THE
SQLCODE -487, Error:
ATTEMPTED TO EXECUTE AN SQL STATEMENT WHEN THE DEFINITION OF
THE FUNCTION OR
PROCEDURE DID NOT SPECIFY THIS ACTION
SQLCODE -483, Error: IN CREATE FUNCTION FOR
NOT MATCH THE NUMBER
OF PARAMETERS OF THE SOURCE FUNCTION
STATEMENT, THE NUMBER OF PARAMETERS DOES
SQLCODE
-482, Error: THE PROCEDURE
RETURNED NO LOCATORS
SQLCODE
-480, Error: THE PROCEDURE
HAS NOT YET BEEN CALLED
SQLCODE -478, Error: DROP OR REVOKE ON OBJECT TYPE
OBJECT OF TYPE IS
DEPENDENT ON IT
CANNOT BE PROCESSED BECAUSE
72
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE -476, Error: REFERENCE TO FUNCTION
FUNCTION IS NOT UNIQUE
WITHIN ITS SCHEMA
SQLCODE -475, Error: THE RESULT TYPE
RETURNS TYPE OF THE
USER-DEFINED FUNCTION
WAS NAMED WITHOUT A SIGNATURE, BUT THE
OF THE SOURCE FUNCTION CANNOT BE CAST TO THE
SQLCODE -473, Error: A USER DEFINED DATA TYPE CANNOT BE CALLED THE SAME NAME AS A
SYSTEM PREDEFINED TYPE
(BUILT-IN TYPE)
SQLCODE
-472, Error: CURSOR
WAS LEFT OPEN BY EXTERNAL FUNCTION
SQLCODE
-471, Error: INVOCATION OF FUNCTION OR PROCEDURE
(SPECIFIC NAME )
FAILED DUE TO REASON
SQLCODE -470, Error: SQL CALL STATEMENT SPECIFIED A NULL VALUE FOR INPUT PARAMETER ,
BUT THE STORED
PROCEDURE DOES NOT SUPPORT NULL VALUES
SQLCODE
PARAMETER
-469, Error: SQL CALL STATEMENT MUST SPECIFY AN OUTPUT HOST VARIABLE FOR
SQLCODE -463, Error: EXTERNAL FUNCTION
SQLSTATE , WITH DIAGNOSTIC TEXT
SQLCODE
(SPECIFIC NAME ) HAS RETURNED AN INVALID
-461, Error: A VALUE WITH DATA TYPE
CANNOT BE CAST TO TYPE
SQLCODE -458, Error: IN A REFERENCE TO FUNCTION
COULD NOT BE FOUND
BY SIGNATURE, A MATCHING FUNCTION
SQLCODE -457, Error: A FUNCTION OR DISTINCT TYPE CANNOT BE CALLED
RESERVED FOR SYSTEM USE
SQLCODE -456, Error: IN CREATE FUNCTION FOR , THE SPECIFIC NAME
THE SCHEMA
SQLCODE -455, Error: IN CREATE FUNCTION FOR , THE SCHEMA NAME
SPECIFIC NAME DOES NOT
MATCH THE SCHEMA NAME OF THE FUNCTION
SINCE IT IS
ALREADY EXISTS IN
PROVIDED FOR THE
SQLCODE -454, Error: THE SIGNATURE PROVIDED IN THE CREATE FUNCTION STATEMENT FOR
MATCHES THE SIGNATURE OF
SOME OTHER FUNCTION ALREADY EXISTING IN THE SCHEMA
SQLCODE -453, Error: THERE IS A PROBLEM WITH THE RETURNS CLAUSE IN THE CREATE
FUNCTION STATEMENT FOR
SQLCODE -451, Error: THE DEFINITION, IN THE CREATE FUNCTION FOR
WHICH IS NOT
APPROPRIATE FOR AN EXTERNAL FUNCTION WRITTEN IN THE GIVEN LANGUAGE
CONTAINS DATA TYPE
SQLCODE -450, Error: USER-DEFINED FUNCTION OR STORED PROCEDURE , PARAMETER NUMBER ,
OVERLAYED STORAGE
BEYOND ITS DECLARED LENGTH
SQLCODE -449, Error: CREATE OR ALTER STATEMENT FOR FUNCTION OR PROCEDURE
INVALID FORMAT OF THE
EXTERNAL NAME CLAUSE OR IS MISSING THE EXTERNAL NAME CLAUSE
SQLCODE
-444, Error: USER PROGRAM
COULD NOT BE FOUND
SQLCODE -443, Error: EXTERNAL FUNCTION
SQLSTATE WITH DIAGNOSTIC TEXT
SQLCODE
(SPECIFIC NAME ) HAS RETURNED AN ERROR
-441, Error: INVALID USE OF 'DISTINCT' OR 'ALL' WITH SCALAR FUNCTION
SQLCODE -440, Error: NO
CURRENT PATH
SQLCODE
CONTAINS AN
BY THE NAME
HAVING COMPATIBLE ARGUMENTS WAS FOUND IN THE
-438, Error: APPLICATION RAISED ERROR WITH DIAGNOSTIC TEXT:
SQLCODE -435, Error: AN INVALID SQLSTATE
IN A SIGNAL SQLSTATE STATEMENT
IS SPECIFIED IN THE FUNCTION RAISE_ERROR OR
73
Software Factory
Cáceres –
SQLCODE
-433, Error: VALUE
SQLCODE
-430, ERROR:
Rafael Campillo Lorenzo.
IS TOO LONG
(SPECIFIC NAME ) HAS ABNORMALLY TERMINATED
SQLCODE -427, Error: DYNAMIC ROLLBACK NOT VALID AT AN APPLICATION SERVER WHERE
UPDATES ARE NOT ALLOWED
SQLCODE -426, Error: DYNAMIC COMMIT NOT VALID AT AN APPLICATION SERVER WHERE UPDATES
ARE NOT ALLOWED
SQLCODE
-423, Error: INVALID VALUE FOR LOCATOR IN POSITION
SQLCODE -421, Error: THE OPERANDS OF A UNION OR UNION ALL DO NOT HAVE THE SAME NUMBER
OF COLUMNS
SQLCODE -420, Error: THE VALUE OF A CHARACTER STRING ARGUMENT WAS NOT ACCEPTABLE TO
THE FUNCTION
SQLCODE -419, Error: A DECIMAL DIVIDE OPERATION IS INVALID BECAUSE THE RESULT WOULD
HAVE A NEGATIVE SCALE
SQLCODE -418, Error: A STATEMENT STRING TO BE PREPARED CONTAINS AN INVALID USE OF
PARAMETER MARKERS
SQLCODE -417, Error: A STATEMENT STRING TO BE PREPARED INCLUDES PARAMETER MARKERS AS
THE OPERANDS OF THE SAME OPERATOR
SQLCODE
-416, Error: AN OPERAND OF A UNION CONTAINS A LONG STRING COLUMN
SQLCODE -415, Error: THE CORRESPONDING COLUMNS, , OF THE OPERANDS OF A UNION OR A
UNION ALL DO NOT HAVE
COMPARABLE COLUMN DESCRIPTIONS
SQLCODE
STRING
-414, Error: A LIKE PREDICATE IS INVALID BECAUSE THE FIRST OPERAND IS NOT A
SQLCODE
-413, Error: OVERFLOW OCCURRED DURING NUMERIC DATA TYPE CONVERSION
SQLCODE
-412, Error: THE SELECT CLAUSE OF A SUBQUERY SPECIFIES MULTIPLE COLUMNS
SQLCODE -411, Error: CURRENT SQLID CANNOT BE USED IN A STATEMENT THAT REFERENCES
REMOTE OBJECTS
SQLCODE
-410, Error: THE FLOATING POINT LITERAL
CONTAINS MORE THAN 30 CHARACTERS
SQLCODE
-409, Error: INVALID OPERAND OF A COUNT FUNCTION
SQLCODE
-408, Error: THE VALUE IS NOT COMPATIBLE WITH THE DATA TYPE OF ITS TARGET
SQLCODE -407, Error: AN UPDATE, INSERT, OR SET VALUE IS NULL, BUT THE OBJECT COLUMN
CANNOT CONTAIN NULL VALUES
SQLCODE -406, Error: A CALCULATED OR DERIVED NUMERIC VALUE IS NOT WITHIN THE RANGE OF
ITS OBJECT COLUMN
SQLCODE -405, Error: THE NUMERIC LITERAL
OUT OF RANGE
SQLCODE
CANNOT BE USED AS SPECIFIED BECAUSE IT IS
-404, Error: THE SQL STATEMENT SPECIFIES A STRING THAT IS TOO LONG
SQLCODE -402, Error: AN ARITHMETIC FUNCTION OR OPERATOR
DATETIME DATA
IS APPLIED TO CHARACTER OR
SQLCODE -401, Error: THE OPERANDS OF AN ARITHMETIC OR COMPARISON OPERATION ARE NOT
COMPARABLE
SQLCODE
-400, Error: THE CATALOG HAS THE MAXIMUM NUMBER OF USER DEFINED INDEXES
SQLCODE
-399, Error: ATTEMPTED TO INSERT AN INVALID VALUE INTO A ROWID COLUMN
SQLCODE -398, Error: A LOCATOR WAS REQUESTED FOR HOST VARIABLE NUMBER
VARIABLE IS NOT A LOB
BUT THE
74
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE -397, Error: THE OPTION GENERATED IS SPECIFIED WITH A COLUMN THAT IS NOT A
ROW ID OR DISTINCT TYPE BASED ON A ROW ID
SQLCODE -396, Error: ATTEMPTED TO EXECUTE AN SQL STATEMENT DURING FINAL CALL
PROCESSING
SQLCODE
FETCH
-392, Error: SQLDA PROVIDED FOR CURSOR
HAS BEEN CHANGED FROM THE PREVIOUS
SQLCODE -390, Error: THE FUNCTION NAME , SPECIFIC NAME , IS NOT VALID IN THE CONTEXT
IN WHICH IT OCCURS
SQLCODE
-373, Error: DEFAULT CANNOT BE SPECIFIED FOR IDENTITY COLUMN
SQLCODE
-372, Error: ONLY ONE ROWID OR IDENTITY COLUMN IS ALLOWED IN A TABLE
SQLCODE
-359, Error: THE RANGE OF VALUES FOR THE IDENTITY COLUMN IS EXHAUSTED
SQLCODE
-355, Error: A LOB COLUMN IS TOO LARGE TO BE LOGGED
SQLCODE -352, Error: AN UNSUPPORTED SQLTYPE WAS ENCOUNTERED IN POSITION
INPUT-LIST
OF THE
SQLCODE -351, Error: AN UNSUPPORTED SQLTYPE WAS ENCOUNTERED IN POSITION
SELECT-LIST
OF THE
SQLCODE
-350, Error: INVALID SPECIFICATION OF A LARGE OBJECT COLUMN
SQLCODE -339, Error: THE SQL STATEMENT CANNOT BE EXECUTED FROM AN ASCII BASED DRDA
APPLICATION REQUESTOR TO
A V2R2 DB2 SUBSYSTEM
SQLCODE
-338, Error: AN ON CLAUSE IS INVALID
SQLCODE -333, Error: THE SUBTYPE OF A STRING VARIABLE IS NOT THE SAME AS THE SUBTYPE
KNOWN AT BIND TIME AND
THE DIFFERENCE CANNOT BE RESOLVED BY TRANSLATION
SQLCODE
-332, Error: SYSSTRINGS DOES NOT DEFINE A TRANSLATION FROM CCSID
TO
SQLCODE -331, Error: A STRING CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE IT CANNOT
BE TRANSLATED.
REASON , CHARACTER , POSITION
SQLCODE -330, Error: A STRING CANNOT BE USED BECAUSE IT CANNOT BE TRANSLATED.
, CHARACTER , HOST VARIABLE
REASON
SQLCODE -327, Error: THE ROW CANNOT BE INSERTED BECAUSE IT IS OUTSIDE THE BOUND OF
THE PARTITION RANGE FOR
THE LAST PARTITION
SQLCODE
-314, Error: THE STATEMENT CONTAINS AN AMBIGUOUS HOST VARIABLE REFERENCE
SQLCODE -313, Error: THE NUMBER OF HOST VARIABLES SPECIFIED IS NOT EQUAL TO THE
NUMBER OF PARAMETER MARKERS
SQLCODE -312, Error: IS AN UNDEFINED OR UNUSABLE HOST VARIABLE OR IS USED IN A
DYNAMIC SQL STATEMENT OR A
TRIGGER DEFINITION
SQLCODE -311, Error: THE LENGTH OF INPUT HOST VARIABLE NUMBER
THAN THE MAXIMUM
SQLCODE
-310, Error: DECIMAL HOST VARIABLE OR PARAMETER
IS NEGATIVE OR GREATER
CONTAINS NON-DECIMAL DATA
SQLCODE -309, Error: A PREDICATE IS INVALID BECAUSE A REFERENCED HOST VARIABLE HAS
THE NULL VALUE
SQLCODE -305, Error: THE NULL VALUE CANNOT BE ASSIGNED TO OUTPUT HOST VARIABLE NUMBER
BECAUSE NO INDICATOR
VARIABLE IS SPECIFIED
SQLCODE -304, Error: A VALUE WITH DATA TYPE
BECAUSE THE VALUE IS NOT
CANNOT BE ASSIGNED TO A HOST VARIABLE
75
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
WITHIN THE RANGE OF THE HOST VARIABLE IN POSITION
WITH DATA TYPE
SQLCODE -303, Error: A VALUE CANNOT BE ASSIGNED TO OUTPUT HOST VARIABLE NUMBER
BECAUSE THE DATA TYPES ARE
NOT COMPARABLE
SQLCODE -302, Error: THE VALUE OF INPUT VARIABLE OR PARAMETER NUMBER
TOO LARGE FOR THE
TARGET COLUMN OR THE TARGET VALUE
IS INVALID OR
SQLCODE -301, Error: THE VALUE OF INPUT HOST VARIABLE OR PARAMETER NUMBER
USED AS SPECIFIED
BECAUSE OF ITS DATA TYPE
SQLCODE -300, Error: THE STRING CONTAINED IN HOST VARIABLE OR PARAMETER
TERMINATED
SQLCODE
-251, Error: TOKEN
CANNOT BE
IS NOT NUL-
IS NOT VALID
SQLCODE -250, Error: THE LOCAL LOCATION NAME IS NOT DEFINED WHEN PROCESSING A THREEPART OBJECT NAME
SQLCODE
-240, Error: THE PART CLAUSE OF A LOCK TABLE STATEMENT IS INVALID
SQLCODE -229, Error: THE LOCALE
LOCALE SENSITIVE WAS NOT FOUND
SPECIFIED IN A SET LOCALE OR OTHER STATEMENT THAT IS
SQLCODE -221, Error: "SET OF OPTIONAL COLUMNS" IN EXPLANATION TABLE
OPTIONAL COLUMN IS MISSING
SQLCODE
-220, Error: THE COLUMN
IN EXPLANATION TABLE
SQLCODE
-219, Error: THE REQUIRED EXPLANATION TABLE
SQLCODE -214, Error: AN EXPRESSION STARTING WITH
REASON CODE =
SQLCODE -212, Error:
TRIGGER DEFINITION
IS INCOMPLETE.
IS NOT DEFINED PROPERLY
DOES NOT EXIST
IN THE
CLAUSE IS NOT VALID.
IS SPECIFIED MORE THAN ONCE IN THE REFERENCING CLAUSE OF A
SQLCODE -208, Error: THE ORDER BY CLAUSE IS INVALID BECAUSE COLUMN
THE RESULT TABLE
IS NOT PART OF
SQLCODE -206, Error: IS NOT A COLUMN OF AN INSERTED TABLE, UPDATED TABLE, OR ANY
TABLE IDENTIFIED IN A
FROM CLAUSE, OR IS NOT A COLUMN OF THE TRIGGERING TABLE OF A TRIGGER
SQLCODE
-205, Error:
IS NOT A COLUMN OF TABLE
SQLCODE
-204, Error:
IS AN UNDEFINED NAME
SQLCODE
-203, Error: A REFERENCE TO COLUMN
SQLCODE
-199, Error: ILLEGAL USE OF KEYWORD , TOKEN
IS AMBIGUOUS
WAS EXPECTED
SQLCODE -198, Error: THE OPERAND OF THE PREPARE OR EXECUTE IMMEDIATE STATEMENT IS
BLANK OR EMPTY
SQLCODE -197, Error: QUALIFIED COLUMN NAMES IN ORDER BY CLAUSE NOT PERMITTED WHEN
UNION OR UNION ALL
SPECIFIED
SQLCODE
-191, Error: A STRING CANNOT BE USED BECAUSE IT IS INVALID MIXED DATA
SQLCODE -190, Error: ATTRIBUTES OF COLUMN
EXISTING COLUMN
IN TABLE
ARE NOT COMPATIBLE WITH THE
SQLCODE
-189, Error: CCSID
IS UNKNOWN OR INVALID FOR THE DATA TYPE OR SUBTYPE
SQLCODE
-188, Error: THE STRING REPRESENTATION OF A NAME IS INVALID
SQLCODE -187, Error: A REFERENCE TO A CURRENT DATE/TIME SPECIAL REGISTER IS INVALID
BECAUSE THE MVS TOD
CLOCK IS BAD OR THE MVS PARMTZ IS OUT OF RANGE
76
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE -186, Error: THE LOCAL DATE LENGTH OR LOCAL TIME LENGTH HAS BEEN INCREASED
AND EXECUTING PROGRAM
RELIES ON THE OLD LENGTH
SQLCODE -185, Error: THE LOCAL FORMAT OPTION HAS BEEN USED WITH A DATE OR TIME AND NO
LOCAL EXIT HAS BEEN INSTALLED
SQLCODE -184, Error: AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE CONTAINS A
PARAMETER MARKER
SQLCODE -183, Error: AN ARITHMETIC OPERATION ON A DATE OR TIMESTAMP HAS A RESULT THAT
IS NOT WITHIN THE
VALID RANGE OF DATES
SQLCODE
-182, Error: AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE IS INVALID
SQLCODE -181, Error: THE STRING REPRESENTATION OF A DATETIME VALUE IS NOT A VALID
DATETIME VALUE
SQLCODE
SQLCODE
ONLY
-180, Error: THE DATE, TIME, OR TIMESTAMP VALUE
IS INVALID
-173, Error: UR IS SPECIFIED ON THE WITH CLAUSE BUT THE CURSOR IS NOT READ-
SQLCODE
-171, Error: THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT
SQLCODE
-170, Error: THE NUMBER OF ARGUMENTS SPECIFIED FOR
SQLCODE
-164, Error:
OF
IS INVALID
IS INVALID
DOES NOT HAVE THE PRIVILEGE TO CREATE A VIEW WITH QUALIFICATION
SQLCODE -161, Error: THE INSERT OR UPDATE IS NOT ALLOWED BECAUSE A RESULTING ROW DOES
NOT SATISFY THE VIEW DEFINITION
SQLCODE
-160, Error: THE WITH CHECK OPTION CANNOT BE USED FOR THE SPECIFIED VIEW
SQLCODE
-159, Error: DROP OR COMMENT ON
IDENTIFIES A(N)
RATHER THAN A(N)
SQLCODE -158, Error: THE NUMBER OF COLUMNS SPECIFIED FOR THE VIEW IS NOT THE SAME AS
THE NUMBER OF COLUMNS SPECIFIED BY THE SELECT CLAUSE, OR THE NUMBER OF COLUMNS SPECIFIED
IN THE CORRELATION CLAUSE IN A FROM CLAUSE IS NOT THE SAME AS THE NUMBER OF COLUMNS IN
THE CORRESPONDING TABLE, VIEW, TABLE EXPRESSION, OR TABLE FUNCTION
SQLCODE -157, Error: ONLY A TABLE NAME CAN BE SPECIFIED IN A FOREIGN KEY CLAUSE.
NOT THE NAME OF A TABLE
SQLCODE
SQLCODE
NOT VALID
IS
-156, Error: THE STATEMENT DOES NOT IDENTIFY A TABLE
-154, Error: THE STATEMENT IS INVALID BECAUSE THE VIEW OR TABLE DEFINITION IS
SQLCODE -153, Error: THE STATEMENT IS INVALID BECAUSE THE VIEW OR TABLE DEFINITION
DOES NOT INCLUDE A
UNIQUE NAME FOR EACH COLUMN
SQLCODE
-152, Error: THE DROP
CLAUSE IN THE ALTER STATEMENT IS INVALID BECAUSE
IS A
SQLCODE -151, Error: THE UPDATE STATEMENT IS INVALID BECAUSE THE CATALOG DESCRIPTION
OF COLUMN INDICATES
THAT IT CANNOT BE UPDATED
SQLCODE -150, Error: THE OBJECT OF THE INSERT, DELETE, OR UPDATE STATEMENT IS A VIEW
OR TRANSITION TABLE
FOR WHICH THE REQUESTED OPERATION IS NOT PERMITTED
SQLCODE
SQLCODE
ALTERED
-148, Error: THE SOURCE TABLE
-147, Error: ALTER FUNCTION
CANNOT BE RENAMED OR ALTERED
FAILED BECAUSE SOURCE FUNCTIONS CANNOT BE
SQLCODE
-144, Error: INVALID SECTION NUMBER
SQLCODE
-142, Error: THE SQL STATEMENT IS NOT SUPPORTED
77
Software Factory
Cáceres –
SQLCODE
RANGE
SQLCODE
Rafael Campillo Lorenzo.
-138, Error: THE SECOND OR THIRD ARGUMENT OF THE SUBSTR FUNCTION IS OUT OF
-137, Error: THE LENGTH RESULTING FROM
IS GREATER THAN
SQLCODE -136, Error: SORT CANNOT BE EXECUTED BECAUSE THE SORT KEY LENGTH IS GREATER
THAN 4000 BYTES
SQLCODE -134, Error: IMPROPER USE OF LONG STRING COLUMN
LENGTH GREATER THAN 255
OR AN EXPRESSION OF MAXIMUM
SQLCODE -133, Error: A COLUMN FUNCTION IN A SUBQUERY OF A HAVING CLAUSE IS INVALID
BECAUSE ALL COLUMN
REFERENCES IN ITS ARGUMENT ARE NOT CORRELATED TO THE GROUP BY RESULT THAT THE HAVING
CLAUSE IS APPLIED TO
SQLCODE
-132, Error: AN OPERAND OF x IS NOT VALID
SQLCODE
-131, Error: STATEMENT WITH LIKE PREDICATE HAS INCOMPATIBLE DATA TYPES
SQLCODE -130, Error: THE ESCAPE CLAUSE CONSISTS OF MORE THAN ONE CHARACTER, OR THE
STRING PATTERN CONTAINS
AN INVALID OCCURRENCE OF THE ESCAPE CHARACTER
SQLCODE
-129, Error: THE STATEMENT CONTAINS TOO MANY TABLE NAMES
SQLCODE
-128, Error: INVALID USE OF NULL IN A PREDICATE
SQLCODE
-127, Error: DISTINCT IS SPECIFIED MORE THAN ONCE IN A SUBSELECT
SQLCODE
BY CLAUSE
-126, Error: THE SELECT STATEMENT CONTAINS BOTH AN UPDATE CLAUSE AND AN ORDER
SQLCODE -125, Error: AN INTEGER IN THE ORDER BY CLAUSE DOES NOT IDENTIFY A COLUMN OF
THE RESULT
SQLCODE -123, Error: THE PARAMETER IN POSITION
OR KEYWORD
IN THE FUNCTION
MUST BE A CONSTANT
SQLCODE -122, Error: A SELECT STATEMENT WITH NO GROUP BY CLAUSE CONTAINS A COLUMN
NAME AND A COLUMN
FUNCTION IN THE SELECT CLAUSE OR A COLUMN NAME IS CONTAINED IN THE SELECT CLAUSE BUT NOT
IN THE GROUP BY CLAUSE
SQLCODE -121, Error: THE COLUMN IS IDENTIFIED MORE THAN ONCE IN THE INSERT OR UPDATE
OR SET TRANSITION VARIABLE STATEMENT
SQLCODE -120, Error: A WHERE CLAUSE, SET CLAUSE, VALUES CLAUSE, OR A SET ASSIGNMENT
STATEMENT INCLUDES A
COLUMN FUNCTION
SQLCODE -119, Error: A COLUMN IDENTIFIED IN A HAVING CLAUSE IS NOT INCLUDED IN THE
GROUP BY CLAUSE
SQLCODE -118, Error: THE OBJECT TABLE OR VIEW OF THE DELETE OR UPDATE STATEMENT IS
ALSO IDENTIFIED IN A FROM CLAUSE
SQLCODE -117, Error: THE NUMBER OF ASSIGNED VALUES IS NOT THE SAME AS THE NUMBER OF
SPECIFIED OR IMPLIED
COLUMNS
SQLCODE -115, Error: A PREDICATE IS INVALID BECAUSE THE COMPARISON OPERATOR
FOLLOWED BY A PARENTHESIZED
LIST OR BY ANY OR ALL WITHOUT A SUBQUERY
IS
SQLCODE
-114, Error: THE LOCATION NAME
DOES NOT MATCH THE CURRENT SERVER
SQLCODE
-113, Error: INVALID CHARACTER FOUND IN: . REASON CODE
SQLCODE
-112, Error: THE OPERAND OF A COLUMN FUNCTION IS ANOTHER COLUMN FUNCTION
SQLCODE
-111, Error: A COLUMN FUNCTION DOES NOT INCLUDE A COLUMN NAME
SQLCODE
-110, Error: INVALID HEXADECIMAL LITERAL BEGINNING
78
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE
-109, Error:
CLAUSE IS NOT PERMITTED
SQLCODE
-108, Error: THE NAME
IS QUALIFIED INCORRECTLY
SQLCODE
-107, Error: THE NAME
IS TOO LONG.
SQLCODE
-105, Error: INVALID STRING
SQLCODE
-104, Error: ILLEGAL SYMBOL "". SOME SYMBOLS THAT MIGHT BE LEGAL ARE:
SQLCODE
-103, Error:
SQLCODE
-102, Error: LITERAL STRING IS TOO LONG.
SQLCODE
-101, Error: THE STATEMENT IS TOO LONG OR TOO COMPLEX
MAXIMUM ALLOWABLE SIZE IS
IS AN INVALID NUMERIC LITERAL
STRING BEGINS
SQLCODE -097, Error: THE USE OF LONG VARCHAR OR LONG VARGRAPHIC IS NOT ALLOWED IN
THIS CONTEXT
SQLCODE
-084, Error: UNACCEPTABLE SQL STATEMENT
SQLCODE -079, Error: QUALIFIER FOR DECLARED GLOBAL TEMPORARY TABLE OR INDEX
SESSION, NOT
SQLCODE
-060, Error: INVALID
SQLCODE
-029, Error: INTO CLAUSE REQUIRED
SQLCODE
-010, Error: THE STRING CONSTANT BEGINNING
SQLCODE
-007, Error: STATEMENT CONTAINS THE ILLEGAL CHARACTER
SQLCODE
000,SUCCESSFUL EXECUTION
SQLCODE
REFERENCE
SQLCODE
MUST BE
SPECIFICATION :
012, Warning: THE UNQUALIFIED COLUMN NAME
IS NOT TERMINATED
WAS INTERPRETED AS A CORRELATED
098, Warning: A DYNAMIC SQL STATEMENT ENDS WITH A SEMICOLON
SQLCODE 100, NOT FOUND:ROW NOT FOUND FOR FETCH, UPDATE, OR DELETE, OR THE RESULT OF A
QUERY IS AN EMPTY TABLE
SQLCODE
SUBSYSTEM
SQLCODE
110, Warning: SQL UPDATE TO A DATA CAPTURE TABLE NOT SIGNALED TO ORIGINATING
111, Warning: THE SUBPAGES OPTION IS NOT SUPPORTED FOR TYPE 2 INDEXES
SQLCODE 117, Warning: THE NUMBER OF INSERT VALUES IS NOT THE SAME AS THE NUMBER OF
OBJECT COLUMNS
SQLCODE
162, Warning: TABLE SPACE . HAS BEEN PLACED IN CHECK PENDING
SQLCODE 203, Warning: THE QUALIFIED COLUMN NAME
UNEXPOSED NAME
SQLCODE
204, Warning:
WAS RESOLVED USING A NON-UNIQUE OR
IS AN UNDEFINED NAME
SQLCODE 206, Warning: IS NOT A COLUMN OF AN INSERTED TABLE, UPDATED TABLE, OR ANY
TABLE IDENTIFIED IN A FROM CLAUSE
SQLCODE
EXPLAINED
218, Warning: THE SQL STATEMENT REFERENCING A REMOTE OBJECT CANNOT BE
SQLCODE
219, Warning: THE REQUIRED EXPLANATION TABLE
SQLCODE
220, Warning: THE COLUMN
SQLCODE
236, Warning: SQLDA INCLUDES
SQLVAR ENTRIES, BUT
ARE REQUIRED FOR
SQLCODE 237, Warning: SQLDA INCLUDES
LEAST ONE OF THE COLUMNS
BEING DESCRIBED IS A DISTINCT TYPE
SQLVAR ENTRIES, BUT
ARE REQUIRED BECAUSE AT
IN EXPLANATION TABLE
DOES NOT EXIST
IS NOT DEFINED PROPERLY
COLUMNS
79
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE 238, Warning: SQLDA INCLUDES SQLVAR ENTRIES, BUT
FOR COLUMNS BECAUSE
AT LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A LOB
SQLVAR ENTRIES ARE NEEDED
SQLCODE 239, Warning: SQLDA INCLUDES SQLVAR ENTRIES, BUT
BECAUSE AT LEAST ONE
OF THE COLUMNS BEING DESCRIBED IS A DISTINCT TYPE
ARE REQUIRED FOR
COLUMNS
SQLCODE 304, Warning: A VALUE WITH DATA TYPE CANNOT BE ASSIGNED TO A HOST VARIABLE
BECAUSE THE VALUE IS
NOT WITHIN THE RANGE OF THE HOST VARIABLE IN POSITION WITH DATA TYPE
SQLCODE 331, Warning: THE NULL VALUE HAS BEEN ASSIGNED TO A HOST VARIABLE BECAUSE THE
STRING CANNOT BE
TRANSLATED. REASON , CHARACTER , HOST VARIABLE
SQLCODE 339, Warning: THE SQL STATEMENT HAS BEEN SUCCESSFULLY EXECUTED BUT THERE MAY
BE SOME CHARACTER
CONVERSION INCONSISTENCIES
SQLCODE
SELECTION
394, Warning: USER SPECIFIED OPTIMIZATION HINTS USED DURING ACCESS PATH
SQLCODE 395, Warning: USER SPECIFIED OPTIMIZATION HINTS ARE INVALID (REASON CODE =
''). THE OPTIMIZATION HINTS ARE IGNORED
SQLCODE
SQLCODE
NOT EXIST
402, Warning: LOCATION
IS UNKNOWN
403, Warning: THE LOCAL OBJECT REFERENCED BY THE CREATE ALIAS STATEMENT DOES
SQLCODE
434, Warning: OPTION
SQLCODE
445, Warning: VALUE
IS A DEPRECATED FEATURE
HAS BEEN TRUNCATED
SQLCODE 462, Warning: EXTERNAL FUNCTION OR PROCEDURE
WARNING SQLSTATE, WITH DIAGNOSTIC TEXT
SQLCODE 464, Warning: PROCEDURE
DEFINED LIMIT
(SPECIFIC NAME ) HAS RETURNED A
RETURNED
QUERY RESULT SETS, WHICH EXCEEDS THE
RETURNED
QUERY RESULT SETS
SQLCODE
466, Warning: PROCEDURE
SQLCODE
494, Warning: NUMBER OF RESULT SETS IS GREATER THAN NUMBER OF LOCATORS
SQLCODE 495, Warning: ESTIMATED PROCESSOR COST OF PROCESSOR SECONDS ( SERVICE UNITS)
IN COST CATEGORY EXCEEDS A RESOURCE LIMIT WARNING THRESHOLD OF SERVICE UNITS SQLCODE
535, Warning: THE RESULT OF THE POSITIONED UPDATE OR DELETE MAY DEPEND ON THE ORDER OF
THE ROWS
SQLCODE 541, Warning: THE REFERENTIAL OR UNIQUE CONSTRAINT
IT IS A DUPLICATE
HAS BEEN IGNORED BECAUSE
SQLCODE
551, Warning:
DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION
SQLCODE
552, Warning:
DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION
SQLCODE
558, Warning: THE WITH GRANT OPTION IS IGNORED
ON OBJECT
SQLCODE 561, Warning: THE ALTER, INDEX, REFERENCES, AND TRIGGER PRIVILEGES CANNOT BE
GRANTED TO PUBLIC AT ALL LOCATIONS
SQLCODE 562, Warning: A GRANT OF A PRIVILEGE WAS IGNORED BECAUSE THE GRANTEE ALREADY
HAS THE PRIVILEGE FROM THE GRANTOR
SQLCODE
585, Warning: THE SCHEMA NAME
APPEARS MORE THAN ONCE IN THE CURRENT PATH
SQLCODE 599, Warning: COMPARISON FUNCTIONS ARE NOT CREATED FOR A DISTINCT TYPE BASED
ON A LONG STRING DATA TYPE
SQLCODE
610, Warning: A CREATE/ALTER ON OBJECT
SQLCODE
625, Warning: THE DEFINITION OF TABLE
HAS PLACED OBJECT IN
PENDING
HAS BEEN CHANGED TO INCOMPLETE
80
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SQLCODE 626, Warning: DROPPING THE INDEX TERMINATES ENFORCEMENT OF THE UNIQUENESS OF
A KEY THAT WAS DEFINED
WHEN THE TABLE WAS CREATED
SQLCODE 645, Warning: WHERE NOT NULL IS IGNORED BECAUSE THE INDEX KEY CANNOT CONTAIN
NULL VALUES
SQLCODE
TABLE
650, Warning: THE TABLE BEING CREATED OR ALTERED CAN NOT BECOME A DEPENDENT
SQLCODE 653, Warning: TABLE
PARTITIONED INDEX HAS
NOT BEEN CREATED
IN PARTITIONED TABLE SPACE
SQLCODE 655, Warning: STOGROUP
WILL NOT BE ALLOWED IN
FUTURE RELEASES.
SQLCODE
IS NOT AVAILABLE BECAUSE ITS
HAS BOTH SPECIFIC AND NON-SPECIFIC VOLUME IDS.
IT
658, Warning: THE SUBPAGES VALUE IS IGNORED FOR THE CATALOG INDEX
SQLCODE 664, Warning: THE INTERNAL LENGTH OF THE LIMIT-KEY FIELDS FOR THE PARTITIONED
INDEX EXCEEDS THE
LENGTH IMPOSED BY THE INDEX MANAGER
SQLCODE
SYSTEMS
738, Warning: DEFINITION CHANGE OF
MAY REQUIRE SIMILAR CHANGE ON READ-ONLY
SQLCODE 799, Warning: A SET STATEMENT REFERENCES A SPECIAL REGISTER THAT DOES NOT
EXIST AT THE SERVER SITE
SQLCODE
POSITION
802, Warning: EXCEPTION ERROR
HAS OCCURRED DURING
OPERATION ON
DATA,
SQLCODE 806, Warning: BIND ISOLATION LEVEL RR CONFLICTS WITH TABLESPACE LOCKSIZE PAGE
OR LOCKSIZE ROW AND LOCKMAX 0
SQLCODE
807, Warning: THE RESULT OF DECIMAL MULTIPLICATION MAY CAUSE OVERFLOW
SQLCODE
863, Warning: THE CONNECTION WAS SUCCESSFUL BUT ONLY SBCS WILL BE SUPPORTED
SQLCODE 883, Warning: ROLLBACK TO SAVEPOINT OCCURRED WHEN THERE WERE OPERATIONS THAT
CANNOT BE UNDONE OR AN OPERATION THAT CANNOT BE UNDONE OCCURRED WHEN THERE WAS A
SAVEPOINT OUTSTANDING
81
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 2.B SQLCODES EN CASTELLANO.
+0
+100
+162
+304
+402
+403
+558
+560
+561
+625
+802
-007
-010
-020
-060
-084
-101
-102
-103
-104
-105
-107
-109
-110
-111
-112
-113
-115
-117
-118
-119
-120
-121
LA SENTENCIA SE HA REALIZADO SATISFACTORIAMENTE.
LA FILA QUE SE PRETENDE BUSCAR NO SE HA ENCONTRADO, BIEN PORQUE NO EXISTE CON LAS
CONDICIONES DE BUSQUEDA O BIEN PORQUE LA TABLA.
ESTA VACIA.
EL ESPACIO PARA TABLAS O LA TABLA ESTAN REVISÁNDOSE O COMPROBÁNDOSE ( NO ESTA
DISPONIBLE).
UN VALOR NO PUEDE SER ASIGNADO A UNA VARIABLE HOST PORQUE EL VALOR NO ESTA DENTRO DEL
RANGO DE LA VARIABLE HOST.
POSICION DESCONOCIDA O IGNORADA.
EL OBJETO REFERENCIADO NO EXISTE PORQUE HA SIDO CREADO CON OTRO NOMBRE.
LA OPCION "GRANT" ES IGNORADA PORQUE EL "GRANT" ESTA HECHO PUBLICO.
LA OPCION "GRANT" ES IGNORADA PARA MODIFICAR COLUMNAS.
LOS PRIVILEGIOS "ALTER" E "INDEX" NO PUEDEN SER CONCEDIDOS AL HACER EL 'GRANT TO PUBLIC AT
ALL LOCATIONS'.
LA DEFINICION DE UNA TABLA (NOMBRE DE LA TABLA) HA SIDO CAMBIADA A INCOMPLETA.
UN ERROR EXCEPCIONAL (TIPO DE EXCEPCION) HA OCURRIDO DURANTE UNA OPERACIÓN (TIPO DE
OPERACIÓN) EN UN DATO (TIPO DE DATO), EN UNA
POSICION (NUMERO DE POSICION).
UNA SENTENCIA SQL CONTIENE UN CARÁCTER ILEGAL, INVALIDO.
LA CONSTANTE DE "STRING" COMENZADA NO HA SIDO TERMINADA.
ESTE ERROR DIO EN MICROFOCUS AL INTENTAR HACER UNA UPDATE EN LA QUE SE HABIA PUESTO LA
PALBRA 'SET' DOS VECES.
LA ESPECIFICACION REFERENCIADA ES UN TIPO DE ESPECIFICACION O CARACTERISTICA INVALIDA
PARA EL DB2.
ESTE ERROR DIO UNA VEZ QUE EL COMPILADOR TRAGO UN CAMPO REFERENCIADO EN UNA
SENTENCIA DB2, Y NO EXISTIENDO EN LA WORKING, PASO LA
COMPILACION, CASCANDO EN LA EJECUCION. COMPROBAR LA LINEA DE MENSAJE DEL DB2(ALGUNA DE
LAS PALABRAS ESCRITAS, BIEN NOMBRES
DE COLUMNA, BIEN CAMPOS WORKING, O BIEN LA WHERE ESTAN MAL ESCRITAS). AL HACER UNA
'SELECT COUNT(*)' COMPROBAR QUE TIENE CORRECTA
LA SINTAXIS. AL ABRIR UN CURSOR: COMPROBAR QUE NOMBRE DEL ULTIMO CAMPO DE UNA SELECT
NO LLEGUE HASTA LA COLUMNA 72. SI SUCEDE
ESTO PASAR ESTE ULTIMO CAMPO A LA LINEA SIGUIENTE. EN LA WHERE SE ESTA COMPARANDO UN
NOMBRE DE COLUMNA CON UN CAMPO WORKING
QUE ESTA SUBDIVIDIDO. SOLUCION: MOVER EL CAMPO SUBDIVIDIDO A OTRO CAMPO SIN SUBDIVIDIR Y
COMPARAR CON ESTE.
LA SENTENCIA DB2 ES DEMASIADO LARGA O DEMASIADO COMPLEJA.
UNA CADENA TIENE MAS DE 254 CARACTERES ALFANUMERICOS O MAS DE 124 CARACTERES
GRAFICOS.
HAY UNA CONSTANTE NUMERICA QUE CONTIENE CARACTERES NO NUMERICOS.
CUANDO TENEMOS PUESTO UN SIMBOLO ERRONEO DENTRO DE EL FICHERO UTILIZADO PARA LA
OPERACIÓN REALIZADA.( POR EJEMPLO, UN
ASTERISCO, EN VEZ DE UN GUION). OCURRIO EN EL BIND AL COMPILAR UN PROGRAMA PORQUE EN EL
JCL HABIA UN / EN VEZ DE DOS EN LA DD.
OCURRIO AL HACER UN UPDATE POR SPUFI PORQUE FALTABA ALGUNA COMA DETRÁS DE CADA VALOR
DEFINIDO EN EL 'SET' PARA MODIFICARLO.
OCURRIO AL HACER UNA SELECT CON ORDER BY POR SPUFI Y FALTABA UNA COMA DETRÁS DE CADA
CAMPO DEL ORDER BY. OCURRIO AL HACER
UNA SELECT CON ORDER BY POR SPUFI Y FALTABA UNA COMA DETRÁS DE CADA CAMPO DEL ORDER
BY. OCURRIO AL HACER UNA SELECT CON
CON ORDER EN DESCENDENTE POR SPUFI Y SE PUSO: NOMBRE-CAMPO D , EN VES DE DESC..
CONSTANTE DE CADENA INVALIDA.
HAY UN NOMBRE DE CAMPO DEMASIADO LARGO (VER MAXIMA LONGITUD EN EL MENSAJE DE DE
ERROR).
CLAUSULA NO PERMITIDA EN ESTA SENTENCIA.
COMIENZO DE UN LITERAL HEXADECIMAL ERRONEO.
UNA FUNCION SQL NO INCLUYE NOMBRE DE CAMPO.
EL OPERANDO DE UNA FUNCION SQL ES OTRA FUNCION SQL, O DISTINCT SEGUIDO DE OTRA
EXPRESION.
SE HA DETECTADO UN CARÁCTER INVALIDO EN UNA PALABRA DE LA SENTENCIA SQL.
LA PARTE DERECHA DE UNA COMPARACION ES ERRONEA PORQUE EL OPERADOR ESTA SEGUIDO DE
UN GRUPO DE PARENTESIS Y EN ALGUNO O EN
TODOS FALTA UNA SUBSELECT.
EL NUMERO DE VALORES EN UNA INSERT ES DISTINTO DEL DE COLUMNAS DE LA TABLA. CUANDO LA
DCL DE LA TABLA ES SUPERIOR, EN LONGITUD,
A LA DCL QUE TENEMOS NOSOTROS EN TSO17. TENDREMOS QUE CREAR LA TABLA DE NUEVO EN
'TSO17.FUENTES.DB2'.
LA TABLA O VISTA EN UNA INSERT, DELETE O UPDATE DEBE SER IDENTIFICADA TAMBIEN EN LA
CLAUSULA FROM. SE INTENTA DECLARAR UN CURSOR
CON UNA JOIN, O CON UNA SUBSELECT, PARA INSERCION, MODIFICADO O BORRADO.
HAY UNA COLUMNA EN LA CLAUSULA HAVING QUE NO ESTA INCLUIDA EN LA CLAUSULA GROUP BY.
ERROR EN LA CLAUSULA WHERE DE UNA FUNCION SQL, O EN UNA COLUMNA DE UN GROUP BY DE UNA
VISTA.
SE HA REPETIDO EL NOMBRE DE ALGUNA COLUMNA EN ALGUNA INSTRUCCIÓN UPDATE.
82
Software Factory
Cáceres –
-122
-125
-126
-127
-128
-129
-131
-132
-133
-134
-136
-144
-150
-151
-153
-154
-155
-156
-158
-159
-160
-161
-164
-180
-181
-198
-199
-203
-204
-205
-206
-207
-208
-219
-220
-301
Rafael Campillo Lorenzo.
SE INTENTA HACER UNA SELECT CON GROUP BY EN LA QUE EXISTEN CAMPOS EN LA SELECT QUE NO
ESTAN EN EL GROUP BY.
UN ENTERO EN LA CLAUSULA ORDER BY NO IDENTIFICA LA COLUMNA DEL RESULTADO.
UNA SENTENCIA CONTIENE A LA VEZ LAS CLAUSULAS FOR UPDATE Y ORDER BY.
NOS DIO CUANDO INTENTAMOS HACER DOS SENTENCIAS: SELECT COUNT (DISTINCT XXXXXXXX) EN LA
MISMA SENTENCIA SQL.
UTILIZACION INCORRECTA DE 'NULL'.
LA SENTENCIA SQL TIENE DEMASIADOS NOMBRES DE TABLA.
SENTENCIA CON ATRIBUTOS SEMEJANTES TIENEN TIPOS DE DATOS NO COMPATIBLES.
UN ATRIBUTO ES INVALIDO PORQUE EL PRIMER OPERANDO NO ES UN NOMBRE DE CAMPO O EL
SEGUNDO NO ES UNA CADENA.
HAY UNA FUNCION SQL ERRONEA EN UNA CLAUSULA HAVING PORQUE SE ESTA APLICANDO UN
OPERADOR ARITMETICO A UNA REFERENCIA
CORRELATIVA.
SE HA HECHO UN USO INAPROPIADO DE UN CAMPO DE LA TABLA DEFINIDO COMO UN 'LONG STRING' O
DE UNA VARIABLE DEL HOST O SU LONGITUD
ES MAYOR QUE 254.
NO SE PUEDE HACER UN SORT PORQUE LA LONGITUD DE LA CLAVE DE ORDENACION ES MAYOR QUE
4000.
LA SECCION NUMERO NNNNN ES INVALIDA. SE HA MODIFICADO ALGUN DBRM INCLUIDO EN EL PLAN DB2
Y NO SE HA EFECTUADO EL BIND.
EL OBJETO PARA LA SENTENCIA INSERT, DELETE O UPDATE ES UNA VISTA PARA LA CUAL LA
OPERACIÓN SOLICITADA NO ESTA PERMITIDA.
LA COLUMNA NO PUEDE SER ACTUALIZADA PORQUE ESTA INCLUIDA EN UNA CLAVE PARTICIONADA, EN
UN ESPACIO PARA TABLA PARTICIONADO O ES EL
RESULTADO DE UNA FUNCION O EXPRESION SQL.
LA SENTENCIA CREATE VIEW (CREAR VISTA ) NO INCLUYE NINGUN NOMBRE DE COLUMNA.
LA SENTENCIA CREATE VIEW (CREAR VISTA ) HA FALLADO PORQUE LA DE COLUMNA.
LA CLAUSULA 'FROM' ES INVALIDA PORQUE UNA DE LAS TABLAS ES UNA VISTA QUE INCLUYE UNA
CLAUSULA 'GROUP BY'.
ALGUNA SENTENCIA 'ALTER TABLE', 'DROP TABLE', 'LOCK TABLE' O 'CREATE INDEX' IDENTIFICA A UNA
VISTA.
EL NUMERO DE COLUMNAS ESPECIFICADO PARA LA VISTA NO ES EL MISMO QUE EL DE LA CLAUSULA
SELECT.
EL NOMBRE ESPECIFICADO EN UNA 'DROP VIEW' ES UN NOMBRE DE TABLA.
LA OPCION 'WITH CHECK' NO PUEDE SER UTILIZADA EN LA VISTA ESPECIFICADA.
LA SENTENCIA SELECT O UPDATE NO ESTA PERMITIDA PORQUE LA FILA RESULTANTE NO SATISFACE LA
DEFINICION DE LA VISTA.
NO SE TIENEN LOS PRIVILEGIOS PARA CREAR UNA VISTA CON CALIFICACION 'WITH'.
UN CAMPO DE UNA TABLA DB2 DEFINIDO COMO DATE CONTIENE UNA SINTAXIS ERRONEA O VALORES
INVALIDOS. POR EJEMPLO UNA FECHA A BLANCOS
O SIN GUIONES.
UN CAMPO DE UNA TABLA DB2 DEFINIDO COMO DATE O COMO TMESTAMP CONTIENE VALORES
INVALIDOS, FUERA DE RANGO. POR EJEMPLO UNA
FECHA : 1993-10-35 O UNA HORA: 12.68,15
EL OPERANDO DE UNA SENTENCIA INTERACTIVA ESTA A BLANCOS O VACIO.
ERROR AL CODIFICAR ALGUNA SENTENCIA DB2 POR SPUFI (FALTA O SOBRA ALGUN PARAMETRO). AL
HACER UNA INSERT POR SPUFI CON VALUES EN
TODOS LOS CAMPOS SI ESTA ASTERISCADA LA LINEA ULTIMA CON PARTE DE LOS VALUES Y CON EL
PARENTESIS Y PUNTO Y COMA DA ESTE CODIGO.
AL HACER UNA SELECT POR SPUFI AL FINAL DE LOS CAMPOS SELECCIONADOS HABIA UNA COMA. USO
ILEGAL DE UNA PALABRA CLAVE O ESTA
ESPERANDO UN COMANDO.
HAY UN NOMBRE DE COLUMNA AMBIGUO ( HAY MAS DE UNO O NO SE LE PUEDE UBICAR POR
INCONSISTENCIA EN SU REFERENCIA).
LA TABLA DB2 NO EXISTE. LOS CAMPOS DE LA TABLA ESTAN MAL DEFINIDOS ( NO COINCIDE LA PICTURE
DE LA DEFINICION DE LA TABLA CON LA IOAREA
DE LA "DESA.MASCARA1". SUCEDIÓ EN LA OPEN DE UN CURSOR DEBIDO A QUE EN LA SELECT DEL
DECLARE CURSOR HABIA ESCRITO UN CAMPO CON
DISTINTO NOMBRE AL QUE EXISTIA COMO NOMBRE DE COLUMNA EN LA TABLA DB2. SUCEDIÓ AL HACER
UNA DELETE CON CURSOR PORQUE EN LA
DELETE FALTABA LA PALABRA 'FROM'. SUCEDIÓ AL HACER PUBLICO EL PLAN DE UN PROGRAMA DEL
QUE SE HABIA HECHO EL FREE PERO NO SE
HABIA COMPILADO, CON LO CUAL NO EXISTE EL NOMBRE DEL PROGRAMA.
HAY UN NOMBRE DE COLUMNA QUE NO ESTA EN LA TABLA.
COLUMNA EN UNA INSERT O UPDATE QUE NO ESTA EN LA TABLA DE LA CLAUSULA FROM. SUCEDIÓ AL
HACER UNA SELECT EN LA QUE SE HABIA PUESTO
EN LA ' WHERE' UN NOMBRE DE COLUMNA QUE NO EXISTIA EN LA TABLA REFERENCIADA EN EL 'FROM'.
TAMBIEN SUCEDIÓ AL PONER EN LA SELECT UN
CAMPO QUE NO ERA UN NOMBRE DE COLUMNA.
LA CLAUSULA 'ORDER BY' ES INVALIDA PORQUE INCLUYE UN NOMBRE DE COLUMNA PERO ESTA
UTILIZADA COMO RESULTADO DE UNA UNION.
SUCEDIÓ AL DECLARAR UN CURSOR CON 'ORDER BY' EN EL QUE LOS CAMPOS DEL ORDER BY NO SE
ESTABAN SELECCIONANDO.
EL NOMBRE DE UNA TABLA EN UNA DECLARE NO EXISTE.
HAY UN NOMBRE DE COLUMNA EN UNA DECLARE QUE NO ESTA DEFINIDA CORRECTAMENTE.
EL VALOR DE UNA COLUMNA DE LA TABLA NO SE PUEDE UTILIZAR PORQUE ES DE UN TIPO 'DATA'.
83
Software Factory
Cáceres –
-302
-303
-304
-305
-309
-310
-311
-312
-313
-401
-402
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-421
-501
-502
-503
-504
-507
-508
-509
-510
Rafael Campillo Lorenzo.
CUANDO SE REALIZA UNA INSERT, Y LA DUMMY DE LA TABLA ES DE DISTINTA LONGITUD QUE LA TABLA
DB2. OCURRE TAMBIEN, CUANDO SE HAN INCLUIDO
COLUMNAS EN LA TABLA, Y NO SE INICIALIZAN EN EL PROGRAMA. SE MOVIA UN CAMPO WORKING PIC
X(10), A UN CAMPO DE LA DCL DE LA TABLA QUE
ESTABA DEFINIDO COMO NUMERICO DE MENOR LONGITUD.
CUANDO LAS COLUMNAS DE LA SELECT EN EL DECLARE CURSOR NO ESTAN REFERENCIADAS EN LA
FETCH. LOS CAMPOS DE LA TABLA ESTAN MAL
DEFINIDOS (NO COINCIDE LA PICTURE DE LA DEFINICION DE LA TABLA CON LA DE LA IOAREA DE LA
"DESA.MASCARA1") Y AL EJECUTAR EN BTS DEVUELVE
ESTE CODIGO.
HAY UN VALOR QUE NO PUEDE SER ASIGNADO A UNA COLUMNA DE LA TABLA PORQUE ESTA FUERA
DEL RANGO DEL TIPO DE DATOS DE ESA COLUMNA.
DA AL UTILIZAR CUALQUIERA DE LAS FUNCIONES PREDEFINIDAS: MAX, MIN, SUM, AVG O COUNT, Y NO
EXISTE NINGUNA FILA EN LA TABLA O LAS FILAS QUE
EXISTEN NO CUMPLEN LAS CONDICIONES DE LA WHERE. SI LA FUNCION PREDEFINIDA UTILIZADA ES LA
COUNT, ESTA DEVUELVE SQLCODE +0 EN VEZ DE
-305 (EN PC Y EN HOST) TANTO SI EXISTEN FILAS COMO SI NO, POR LO QUE HABRA QUE PREGUNTAR SI
EL CONTADOR ES MAYOR O IGUAL A CERO PARA
SABER SI HA ENCONTRADO FILAS O NO. EL VALOR NULL NO SE PUEDE ASIGNAR A UNA COLUMNA DE LA
TABLA PORQUE NO ESTA DEFINIDA COMO
VARIABLE. AL RECUPERAR UNA FILA CON UNA FECHA A BLANCOS QUE TIENE FORMATO 'DATE'.
EL ATRIBUTO ES INVALIDO PORQUE EL CAMPO DE LA TABLA TIENE VALOR NULO.
UN CAMPO NUMERICO CONTIENE VALORES RAROS.
EL INDICADOR DE LONGITUD DE UN CAMPO DE LA TABLA ES NEGATIVO.
NOMBRE DE CAMPO DE UNA TABLA NO DEFINIDO O NO SE PUEDE USAR.
EL NUMERO DE CAMPOS DE LA TABLA ESPECIFICADOS NO ES EL MISMO QUE EL DE PARAMETROS
MARCADOS.
EN GENERAL SUCEDE AL COMPARAR DOS CAMPOS DE DISTINTO TIPO: NUMERICO-ALFANUM., DATEALFANUMERICO, ETC... CUANDO ESTAMOS
INTENTANDO MODIFICAR UNA FILA POR SPUFI CON UN VALOR ALFANUMERICO Y EL CAMPO A
MODIFICARES NUMERICO. CUANDO ESTAMOS INTENTANDO HACER UNA SELECT POR SPUFI CON UN VALOR ALFANUMERICO Y VICEVERSA. CUANDO SE
SELECCIONA UN CAMPO QUE NO EXISTE EN LA TABLA.
SE INTENTA HACER UNA OPERACIÓN ARITMETICA O UNA SUMA CON UNA COLUMNA DEFINIDA COMO
ALFANUMERICA: SUCEDIÓ AL HACER UNA SELECT
SUM POR SPUFI, PIDIENDO QUE SUMARA UN NOMBRE DE COLUMNA DEFINIDA COMO ALFANUMERICA.
CUANDO ESTAMOS INTENTANDO INSERTAR, O MODIFICAR UNA FILA CON UN VALOR QUE EXCEDE A LA
LONGITUD DETERMINADA PARA LA COLUMNA EN
EL AREA TABLA-WORKING.
DIO AL ACCEDER A UNA TABLA DB2 PORQUE UN NOMBRE DE COLUMNA DE LA TABLA ESTABA DEFINIDO
COMO "COMP-3" QUE SE USABA EN LA WHERE
Y SE LE HABIA MOVIDO CONTENIDO NO NUMERICO. SE HA UTILIZADO UN LITERAL NUMERICO QUE ESTA
FUERA DE RANGO.
EL VALOR NUMERICO HALLADO ESTA FUERA DEL RANGO DE LA COLUMNA OBJETO DE LA OPERACIÓN.
EN UNA OPERACIÓN UPDATE O INSERT EL VALOR A ACTUALIZAR ES NULO Y EL CAMPO NO PUEDE
CONTENER NULOS.
CUANDO ESTAMOS INTENTANDO INSERTAR O MODIFICAR UNA FILA CON UN VALOR NUMERICO Y LA
COLUMNA ES ALFANUMERICA. EL VALOR EN UNA
INSERT O UPDATE NO ES EL MISMO TIPO QUE LA COLUMNA QUE SE QUIERE ACTUALIZAR.
OPERADOR INVALIDO EN UNA FUNCION 'COUNT'.
HAY UN LITERAL EN COMA FLOTANTE QUE TIENE MAS DE 30 CARACTERES.
LA CLAVE DEL USUARIO NO SE PUEDE UTILIZAR COMO SE ESPECIFICA.
LA CLAUSULA SELECT DE UNA SUBSELECT ESPECIFICA MULTIPLES COLUMNAS.
HAY UN DESBORDAMIENTO DURANTE UNA CONVERSION DE TIPOS DE DATOS.
HAY UNA COLUMNA NUMERICA ESPECIFICADA COMO ATRIBUTO EN UNA 'LIKE'.
LAS COLUMNAS CORRESPONDIENTES EN LOS OPERANDOS DE UNA CLAUSULA 'UNION' NO TIENEN LAS
MISMAS DESCRIPCIONES DE CAMPO.
UN OPERANDO DE UNA 'UNION' CONTIENE UNA COLUMNA CON ATRIBUTO LONG STRING.
LA SENTENCIA DE CADENA A PREPARAR INCLUYE PARAMETROS UTILIZADOS COMO OPERANDOS DEL
MISMO OPERADOR.
LA SENTENCIA DE CADENA A PREPARAR INCLUYE PARAMETROS UTILIZADOS EN UNA CLAUSULA
SELECT.
EL RESULTADO DE UNA DIVISION DECIMAL DIO UN VALOR NEGATIVO.
LOS OPERANDOS DE UNA 'UNION' NO TIENEN EL MISMO NUMERO DE COLUMNAS.
SE INTENTA LEER O CERRAR UN CURSOR QUE NO HA SIDO ABIERTO.
SE INTENTA ABRIR UN CURSOR QUE YA ESTA ABIERTO.
CUANDO EN UNA UPDATE SE QUIERE MODIFICAR UN CAMPO QUE NO HA SIDO ESPECIFICADO EN EL
FOR UPDATE AL CREAR EL CURSOR.
EL CURSOR ESPECIFICADO NO HA SIDO DEFINIDO.
EL CURSOR ESPECIFICADO PARA LA UPDATE O DELETE NO SE HA ABIERTO.
EL CURSOR ESPECIFICADO PARA LA UPDATE O DELETE NO SE HA POSICIONADO CORRECTAMENTE. SE
INTENTA HACER UPDATE O DELETE DE UNA FILA
QUE NO EXISTE (SQLCODE DEL CURSOR ES +100).
SE PRODUCE CUANDO DECLARAMOS UN CURSOR PARA UNA TABLA Y AL HACER EL ACCESO LO
UTILIZAMOS PARA OTRA TABLA.
SE PRODUCE CUANDO SE INTENTA MODIFICAR UNA COLUMNA DE UNA TABLA QUE NO ESTA EN LA
SELECT DEL CURSOR O QUE NO SE HA PUESTO EN LA
84
Software Factory
Cáceres –
-511
-514
-516
-517
-518
-519
-530
-535
-540
-551
-552
-554
-555
-556
-557
+558
-559
+560
-601
-602
-603
-604
-607
-612
-614
-616
-618
-619
-620
-623
-636
-637
-644
-646
-647
-652
-653
-660
-661
-662
-663
-664
-665
Rafael Campillo Lorenzo.
CLAUSULA FOR UPDATE OF. (ESTE ERROR DA EN EL BIND EN COMPILACION). LA TABLA DESIGNADA EN
EL DECLARE DEL CURSOR PARA MODIFICAR O
BORRAR DICHA TABLA, NO PUEDE MODIFICARSE O BORRARSE (DEBIDO A QUE FALTA EN EL DECLARE
CURSOR LA CLAUSULA "FOR UPDATE OF...".
LA CLAUSULA 'FOR UPDATE' NO SE PUEDE UTILIZAR PORQUE LA TABLA UTILIZADA POR EL CURSOR NO
SE PUEDE MODIFICAR.
EL CURSOR UTILIZADO NO ESTA PREPARADO.
LA SENTENCIA DE DESCRIPCION NO IDENTIFICA UNA SENTENCIA PREPARADA.
EL CURSOR UTILIZADO NO SE PUEDE UTILIZAR PORQUE NO ESTA DEFINIDO EN LA SENTENCIA SELECT
CORRESPONDIENTE.
LA SENTENCIA EJECUTADA NO ES UNA SENTENCIA SELECT VALIDA.
LA SENTENCIA DE PREPARACION IDENTIFICA LA SENTENCIA DE SELECCIÓN DEL CURSOR ABIERTO
NOMBRE-DE-CURSOR.
SE INTENTA DAR DE ALTA O MODIFICAR EN UNA TABLA CON INTEGRIDAD REFERENCIAL Y NO EXISTE EL
PADRE DE LA RELACION.
EN UNA UPDATE CON CURSOR, NO SE PUEDEN PONER LOS CAMPOS QUE SON CLAVE E INDICE UNICO.
SE INTENTA CREAR UNA TABLA QUE TIENE INTEGRIDAD REFERENCIAL SIN HABER CREADO ANTES LA
TABLA O EL/LOS INDICE/S DE LA TABLA PADRE.
NO SE TIENE PRIVILEGIO PARA REALIZAR ALGUNA OPERACIÓN .POR EJEMPLO AL HACER EL CREATE DE
UNA TABLA DB2. TAMBIEN PUEDE OCURRIR
POR: EL OBJETO DB2 NO EXISTE. EL OBJETO ESTA EN ESTADO READ ONLY. SE ESTA INTENTANDO
CREAR UN OBJETO CON UN AUTHORIZATION-ID QUE
NO TIENE AUTORIZACION PARA DICHA FUNCION. SI SE ESTA HACIENDO UN CREATE O UN ALTER DE
UNA TABLA DEFINIDA CON INTEGRIDAD REFERENCIAL
Y NO SE TIENE AUTORIZACION.
EL USUARIO NO TIENE PRIVILEGIOS, PARA HACER LA OPERACIÓN.
UN USUARIO AUTORIZADO NO PUEDE CONCEDERSE PRIVILEGIOS A SI MISMO.
UN USUARIO AUTORIZADO NO PUEDE REVOCARSE PRIVILEGIOS A SI MISMO.
UN PRIVILEGIO NO SE PUEDE REVOCAR PORQUE NO LO PUEDE MODIFICAR EL USUARIO(PARAMETRO1).
COMANDO GRANT/REVOKE (PARAMETRO1) ERRONEO, LOS MANDATOS PERMITIDOS SON
(PARAMETRO2).
LA OPCION 'WITH' DE UNA GRANT ES IGNORADA PORQUE LA GRANT ES PUBLICA (WARNING).
TODAS LAS FUNCIONES AUTORIZADAS HAN SIDO DESACTIVADAS.
LA OPCION WITH DE UNA GRANT ES IGNORADA PARA ACTUALIZAR COLUMN-LIST (WARNING).
SE INTENTA CREAR ALGO QUE YA ESTA CREADO.
SE HAN ESPECIFICADO DEMASIADAS COLUMNAS AL INTENTAR CREAR UN INDICE.
SE INTENTA CREAR UN INDICE QUE EN SU TABLA CORRESPONDIENTE TIENE FILAS CON LA CLAVE
REPETIDA.
LA DEFINICION DE UNA COLUMNA TIENE ERRORES EN SU LONGITUD, PRECISION O ATRIBUTOS.
LA OPERACIÓN (PARAMETRO1) NO ESTA DEFINIDA PARA LAS TABLAS.
LA COLUMNA (PARAMETRO1) ESTA DUPLICADA.
EL INDICE NO SE PUEDE CREAR PORQUE LA SUMA INTERNA DE LAS LONGITUDES DE SUS CAMPOS
CORRESPONDIENTES ES MAYOR QUE EL MAXIMO
PERMITIDO.
EL OBJETO (PARAMETRO1) NO SE PUEDE BORRAR PORQUE ES UTILIZADO POR EL OBJETO
(PARAMETRO2).
LA OPERACIÓN (PARAMETRO1) NO ESTA PERMITIDA EN EL SISTEMA DE BASES DE DATOS.
OPERACIÓN NO PERMITIDA PORQUE LA BASE DE DATOS DE TRABAJO NO ESTA INACTIVA.
EL COMANDO (PARAMETRO1) EN SENTENCIA (PARAMETRO2) NO ESTA PERMITIDO PARA EL ESPACIO DE
TABLAS EN LA BASE DE DATOS DE TRABAJO.
YA EXISTE ESTE INDICE PARA LA TABLA (PARAMETRO1).
LA CLAVE PARTICIONADA NO TIENE ESPECIFICADO SI ES EN ORDEN ASCENDENTE O DESCENDENTE.
LA CLAVE ESTA DUPLICADA.
EL VALOR ESPECIFICADO PARA LA CLAVE (PARAMETRO1) EN LA SENTENCIA (PARAMETRO2) ES
ERRONEO.
LA TABLA (PARAMETRO1) NO SE PUEDE CREAR EN EL ESPACIO PARA TABLAS (PARTICIONADO/POR
DEFECTO)(PARAMETRO2) PORQUE YA ESTA
OCUPADO POR OTRA TABLA.
EL BUFFER COMUN (PARAMETRO1) NO SE PUEDE UTILIZAR PORQUE NO HA SIDO ACTIVADO.
VIOLACION DEL PROCEDIMIENTO DE EDICION O DE VALIDACION(PARAMETRO1) DE LA INSTALACION.
LA TABLA (PARAMETRO1) EN EL ESPACIO PARTICIONADO PARA TABLAS(PARAMETRO2) NO ESTA
DISPONIBLE PORQUE EL INDICE CORRESPONDIENTE
NO HA SIDO CREADO.
EL INDICE (PARAMETRO1) NO SE PUEDE CREAR EN EL ESPACIO PARTICIONADO PARA TABLAS
(PARAMETRO2)PORQUE NO SE HAN ESPECIFICADO LOS
LIMITES PARA LA CLAVE.
EL INDICE (PARAMETRO1) NO SE PUEDE CREAR EN EL ESPACIO PARTICIONADO PARA TABLAS
(PARAMETRO2)PORQUE EL NUMERO DE PARTES
ESPECIFICADO NO ES IGUAL AL NUMERO DE PARTICIONES DEL ESPACIO PARA TABLAS.
EL INDICE PARTICIONADO NO SE PUEDE CREAR EN EL ESPACIO NO PARTICIONADO PARA TABLAS
(PARAMETRO1).
EL NUMERO DE VALORES POSIBLES PARA LA CLAVE ES ZERO O MAYOR QUE EL NUMERO DE
COLUMNAS EN LA CLAVE INDICE (PARAMETRO1).
LA LONGITUD INTERNA DE LOS CAMPOS CLAVE-LIMITE DEL INDICE PARTICIONADO (PARAMETRO1)
EXCEDE DE LA LONGITUD IMPUESTA POR EL GESTOR
DE INDICES.
LA CLAUSULA PART DE UNA SENTENCIA ALTER HA SIDO OMITIDA O ES ERRONEA.
85
Software Factory
Cáceres –
-666
-667
-668
-669
-670
-671
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-802
-803
-804
-805
-811
-815
-817
-818
-819
-820
-822
-840
-901
-904
Rafael Campillo Lorenzo.
PENDIENTE DE UNA UTILIDAD: UNA VEZ ESTABA 'COPY PENDING': SOLUCION : DESDE LA OPCION 7
(COMANDOS) DEL DB2: START DATABASE
(BT999PROG) SPACENAN (ETXXXXXX) ACCESS (FORCE).
UN GRUPO DE INDICES DE UN ESPACIO PARTICIONADO PARA TABLAS NO PUEDE SER EXPLICITAMENTE
BORRADO.
NO SE PUEDE CREAR UNA NUEVA COLUMNA PORQUE LA TABLA SE ESTA EDITANDO.
UNA TABLA DE UN ESPACIO PARTICIONADO PARA TABLAS NO PUEDE SER EXPLICITAMENTE BORRADA.
LA LONGITUD DEL REGISTRO DE LA TABLA EXCEDE EL MARCO DE PAGINA.
EL ATRIBUTO DE BUFFER COMUN DEL ESPACIO PARA TABLAS NO SE PUEDE CAMBIAR PORQUE ESTO
CAMBIARIA EL TAMAÑO DE LA PAGINA DEL
ESPACIO PARA TABLAS.
NO SE PUEDE UTILIZAR PARA UN INDICE UNA PAGINA DE 32 K DEL ESPACIO PARA TABLAS.
NO HAY SUFICIENTE ESPACIO VIRTUAL PARA LA EXPANSION DEL BUFFER COMUN.
EL LITERAL (PARAMETRO1) ESPECIFICADO COMO VALOR LIMITE DEL INDICE DEBE ESTAR DE ACUERDO
CON EL TIPO DE DATO (PARAMETRO2) DE LA
COLUMNA CORRESPONDIENTE (PARAMETRO3).
SE INTENTA HACER EL DROP Y LA CREATE DE UNA TABLA, EL DROP LO REALIZA BIEN PERO NO LA
CREATE DEBIDO A QUE SE NECESITA HACER UN
COMMIT ENTRE EL DROP Y LA CREATE DE LA TABLA DB2.
LA TABLA TIENE DEMASIADAS COLUMNAS.
LA COLUMNA (PARAMETRO1) HA VIOLADO LOS PROCEDIMIENTOS DE DEFINICIÓN DE CAMPOS DE LA
INSTALACION. RT: CODIGO-RETORNO
RS: REASON-CODE MSG: MENSAJE.
PROCEDIMIENTO (PARAMETRO1) NO PUEDE SER CARGADO.
TIPO DE COLUMNA (PARAMETRO1) INVALIDO PARA ESTE PROCEDIMIENTO.
LA LONGITUD DEL LITERAL QUE COMIENZA CON ( PARAMETRO1) ES DEMASIADO LARGA.
TIPO DE CAMPO INVALIDO, NOMBRE-DE-COLUMNA.
NO SE PUEDEN COMPARAR DOS COLUMNAS DE DIFERENTE TIPO.
DOS TIPOS DE DATOS QUE NO SE PUEDEN COMPARAR.
DATOS INCORRECTOS DEVUELTOS POR EL PROCEDIMIENTO (PARAMETRO1, PARAMETRO2).
HA HABIDO UNA DIVISION POR ZERO O UN DESBORDAMIENTO (OVERFLOW) ARITMETICO.
SE INTENTA INSERTAR UNA FILA CON CLAVE YA EXISTENTE.MODIFICAR EL INDICE UNICO DE UNA FILA
(INSERTAR Y YA EXISTE).
UN ERROR HA SIDO ENCONTRADO EN EL PGM, EN LOS PARAMETROS DE ENTRADA PARA EL SQL
STATEMENT: OCURRIO AL DESBORDARSE UNA TABLA
WORKING MACHACANDO LA SQLDA DE DB2. OCURRIO UNA VEZ QUE SISTEMAS HABIA MODIFICADO EL
PROCEDIMIENTO DE COMPILACION...
OCURRIO CON UNA LECTURA IMS, EN LA QUE SE INDICO UNA LONGITUD MAYOR QUE LA INFORMACION
ENVIADA, POR LO QUE SE MACHACABA LA SQLCA...
SE HA DECLARADO UNA TABLA WORKING CON MENOS FILAS DE LAS NECESARIAS.
NOMBRE DEL PROGRAMA (PARAMETRO1) NO ENCONTRADO EN EL PLAN (PARAM2); OCURRE CUANDO
EL MODULO EN EL QUE ESTA ACCEDIENDO A DB2
NO ESTA EN EL PASO BIND DEL JCL, O BIEN AUSENCIA DEL MODULO EN LA DBRM, PRODUCIDO POR NO
EXISTIR EN LA TSOXX.PGMPRUE.
CUANDO SE INTENTA REALIZAR CUALQUIER CASO DE SELECT (NORMAL, JOIN, ETC.), Y SE RECUPERA
MAS DE UNA FILA.
SE HA INCLUIDO UNA CLAUSULA ORDER BY O HAVING EN UNA SUBSELECT O UNA SUBCONSULTA DE UN
PREDICADO.
LA SENTENCIA INSERT, UPDATE, DELETE, DDL O GRANT NO PUEDE SER EJECUTADA PORQUE LA
TRANSACCION IMS HA SIDO DEFINIDA COMO DE LECTURA
SOLUCION: GENERAR LA TRANSACCION IMS COMO LECTURA Y ACTUALIZACION.
NO COINCIDEN LOS TIMESTAMP: VOLVER A COMPILAR. AL COMPILAR, EN EL PROCEDIMIENTO DE
COMPILACION EL NOMBRE DEL PLAN ESTA MAL.
ESTE ERROR SUCEDE SI: EL PROGRAMA SE HA PRECOMPILADO, COMPILADO Y LINKEDITADO, PERO NO
SE HA HECHO EL BIND.
SE HA PRECOMPILADO Y SE HA HECHO EL BIND, SIN HABER HECHO LA COMPILACION Y EL LINK-EDIT, O
LA LINK-EDIT NO HA ACABADO BIEN. EL BIND
SE HA HECHO CON UN DBRM QUE NO SE HA CREADO EN EL MISMO PROCESO DE LINK-EDIT QUE EL
MODULO CARGABLE. AL COMPILAR UN BATCH(B2),
NO SE HABIA HECHO EL FREE DEL PROGRAMA. SOLUCION: PARAR Y ARRANCAR LA REGION.
LA VISTA NO SE PUEDE UTILIZAR PORQUE ES UNA REFERENCIA A OTRA VISTA QUE NO SE PUEDE
UTILIZAR.
LA SENTENCIA SQL NO SE PUEDE PROCESAR PORQUE (PARAMETRO1) CONTIENE UN VALOR NO VALIDO
EN ESTA VERSION DEL PRODUCTO.
LA SQLCA CONTIENE UNA DIRECCION DE DATOS O UNA DIRECCION DE INDICADOR DE VARIABLE QUE
NO ES VALIDA.
DEMASIADAS FILAS DEVUELTAS POR UNA SELECT O QUE SE PRETENDEN INSERTAR
NO SE EJECUTO LA SENTENCIA POR UN ERROR EN EL SISTEMA, QUE NO IMPEDIRIA LA EJECUCION DE
LAS SIGUIENTES SENTENCIAS SQL.
RECURSO NO DISPONIBLE (REASON CODE 00C200F6). REINTENTAR ALGO MIGRADO O PILLADO
(REASON CODE 00C90081). AL HACER UNA "LOAD" (SI DA
ERROR) SE PUEDE QUEDAR LA TABLA CON DISPOSICION "COPY" (NO DEJA ACCEDER);
CONTENCION (DEADLOCK). EL PROCESO ESTA ESPERANDO UN RECURSO QUE ESTA UTILIZANDO OTRO
PROCESO Y A SU VEZ ESTE ESTA ESPERANDO
EL RECURSO QUE EL PRIMER PROCESO ESTA UTILIZANDO (REASON CODE 00C9008E).
EL OBJETO DB2 ESTA SIENDO UTILIZADO POR OTRO PROCESO, SU PROCESO HA ESTADO ESPERANDO
HASTA EL TIEMPO LIMITE Y LUEGO HA SIDO CANCELADO.PROCESO CON CONTENCION
86
Software Factory
Cáceres –
-905
-906
-909
-910
-911
-913
-922
-923
-924
-925
-927
-1010
-1013
-1034
-1045
-1084
-1206
-1408
Rafael Campillo Lorenzo.
EN SDSF. DA EN LA TAREA T005MSTR. (REASON CODE 00C90089).
ALGO NO DISPONIBLE SE LLAMO A TECNICA DE SISTEMAS Y HABIA UN DISCO DAÑADO. (REASON CODE
00C90094).
AL INTENTAR BORRAR UNA TABLA PORQUE HA SIDO CREADA CON VSAM Y EL CATALOGO DEL DB2 NO
SE HA ENTERADO. (REASON CODE 00C90097).
PENDIENTE DE UNA UTILIDAD.(REASON CODE 00D70014)./ UNFICHERO HA INTENTADO EXTENDERSE Y
NO EXISTE ESPACIO EN DISCO. UN FICHERO HA
TOMADO EL MAXIMO NUMERO DE EXTENSIONES(119) Y AL INTENTAR COGER UNA MAS HA PROVOCADO
EL ERROR.(REASON CODE 00D70023).
FALTA DE ESPACIO (REASON CODE 00D70024). / EXISTE EL CATALOGO PERO NO LOS FICHEROS
(REASON CODE 00E70010).
EL RECURSO NO DISPONIBLE NO SE ENCUENTRA EN ALGUNA LIBRERÍA. SUCEDIÓ CON UN PGM ON-LINE
CUYA COMPILACION NO EXISTIA EN LA 'DESA.
PGMPRUE.ONLINE'
LA SENTENCIA SQL CONTRA EL RECURSO (PARAMETRO1) HA EXCEDIDO EL TIEMPO LIMITE DE CPU
(PARAMETRO2) Y SU PROCESO HA SIDO CANCELADO
EL PROGRAMA PUEDE SEGUIR EJECUTANDO OTRAS SENTENCIAS SQL.
LA SENTENCIA SQL NO SE PUEDE EJECUTAR PORQUE ESTA FUNCION HA SIDO DESACTIVADA DEBIDO A
UN ERROR PREVIO.
EL OBJETO HA SIDO BORRADO.
LA SENTENCIA SQL NO PUEDE ACCEDER A UN OBJETO SOBRE EL QUE ESTA PENDIENTE UNA
SENTENCIA DROP O ALTER.
LOS CAMBIOS EFECTUADOS DESDE EL ULTIMO PUNTO DE SINCRONIA HAN SIDO ANULADOS
(ROLLBACK) DEBIDO A QUE LOS RECURSOS NO ESTAN
LIBRES (DEADLOCK) O SE PASO EL TIEMPO DE ESPERA (TIME-OUT).
EJECUCION CANCELADA DEBIDO A UN DEADLOCK O A UN TIME-OUT. RAZON (PARAMETRO1), TIPO DE
RECURSO (PARAMETRO2), NOMBRE DEL RECURSO
(PARAMETRO3). EL PROGRAMA DE APLICACIÓN DEBERIA HACER COMMIT O ROLLBACK. VOLVER A
EJECUTAR. SI LA FRECUENCIA DE ESTE SQLCODE ES
ALTA ESTUDIAR LA POSIBILIDAD DE HACER VARIOS PUNTOS DE COMMIT.
FALTA DE AUTORIZACION: HACER PUBLICO EL PLAN (GRANT). SI (PARAMETRO1) ES UN USUARIO INDICA
QUE EL USUARIO NO TIENE AUTORIZACION PARA
CONECTARSE A DB2. SI (PARAMETRO1)ES UN PLAN INDICA QUE EL DB2 NO PUEDE ALOCAR ESE PLAN.
SI (PARAMETRO1) ES UN SUBSISTEMA INDICA QUE
EL NOMBRE DE ESTE SUBSISTEMA ES INVALIDO.
CONEXIÓN NO ESTABLECIDA - DB2 NO OPERACIONAL. HACER UN GRANT PUBLIC. EN EL JCL DE
EJECUCION FALTA LA FICHA DB2. ESTO SUCEDE SI :
NO SE HECHO EL BIND. EL PLAN ES INVALIDO O NO ESTA OPERATIVO. HACER EL BIND. UNA BASE DE
DATOS, UN TABLESPACE, UN INDICE O UNA TABLA QUE
VAN A SER ACCEDIDAS POR AL PLAN NO ESTAN DISPONIBLES. FALLOS EN ALGUN FICHERO VSAM. DB2
PARADO.
PROBLEMAS DE CONEXIÓN CON EL DB2: OCURRE CUANDO SE HA CAIDO EL DB2.
COMMIT NO VALIDO EN EL ENTORNO IMS/VS O CICS/OS/VS.
EL INTERFACE DEL LENGUAJE (LI) FUE LLAMADO CUANDO LA CONEXIÓN DEL ENTORNO AUN NO HABIA
SIDO ESTABLECIDA. EL PROGRAMA FUE LLAMADO
BAJO EL COMANDO DSN. EN UNA EJECUCION BATCH CON DB2 LE FALTAN LAS FICHAS DEL DB2.
(EN MICROFOCUS) FALTA DE MEMORIA
(EN MICROFOCUS) EL COD-IDENT NO ESTA DEFINIDO COMO "COMP" S9(4)COMP, SI NO COMO S9(4).
FALTAN LOS DOS PUNTOS QUE PRECEDEN A LOS CAMPOS WORKING DE LA WHERE EN UNA SELECT O
EN UN CURSOR. ENTRE LOS CAMPOS SELECCIONADOS DE UN CURSOR HABIA UN PUNTO EN VEZ DE UNA COMA
(EN MICROFOCUS) UN CAMPO DEL REGISTRO TRATADO (FICHERO REAL) NO ESTA EN EL FORMATO QUE
LE CORRESPONDE. EL ERROR SE PRODUCE
CUANDO SE COMPARA CON SU IGUAL EN LA TABLA DB2 DE TRABAJO.
(EN MICROFOCUS) ERROR DE ESCRITURA EN LA SENTENCIA DB2. (EJ.: ALGUNA PALABRA MAL ESCRITA,
ETC...).
(EN MICROFOCUS) EN UNA UPDATE HABIA UN CAMPO QUE NO ERA DE ESA TABLA.
-1451, -14...(OTROS) (EN MICROFOCUS)- LA TABLA DB2 POSEIA UN CAMPO DEFINIDO COMO TIMESTAMP
Y DABA PROBLEMAS AL INTENTAR REALIZAR UNA
COSULTA AL MOVERLE LOW-VALUES A ESE CAMPO. TAMBIEN SE OBTUVIERON AL INTENTAR
INSERTAREN LA TABLA YA QUE LA INSERT NO TIENE QUE
LLEVAR VALUE DE ESE CAMPO Y EN EL INTO HAN DE NOMBRARSE TODOS LOS CAMPOS EXCEPTO EL
CAMPO TIMESTAMP.
87
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 3: ABEND CODES bajo TSO / ISPF
S001-4 Abend
Input file record length is not equal to the length stated in the DD or the FD.
Wrong length record.
IO error, damaged tape, device malfunction.
With disk, reading a dataset that was allocated but never written to.
Writing to input file
Concatenation of files with different record lengths or record formats.
S001-5 Abend
Reading after the end of the file by non-COBOL program.
COBOL intercepts this and displays "QSAM error, status 92".
Out of space on output disk file.
S002 Abend
With variable format files used for output.
The record is larger than the track size.
The record length is greater than allowed maximum 32,768.
The wrong record length is being used on output.
The 4-byte record length indicator is wrong.
Record greater than 32,768 bytes
S013-10 Abend
A dummy file with no blocksize.
S013-14 Abend
A library has run out of space in its directory.
You have to backup, delete, and restore the library with IEBCOPY.
A dataset is sequential, but the JCL indicates that it is a library/PDS.
S013-18 Abend
A library member was specified in the JCL but was not found.
S013-20 Abend
The block size is not a multiple of record length.
Check record length in program, compare to actual record length of file
S013-34 Abend
The block size was found to be 0.
A new file is being created but block size was not in the JCL.
S013-40 Abend
Reading a file whose JCL has SYSOUT=
S106 Abend
The program on the program library was unreadable. Recompile and link.
S122 Abend
The job was canceled because it violated some restriction.
A dump was requested
S137 Abend
A tape has a bad trailer label.
Copy the file with IEBGENER, ignoring the error. The copy will be good.
Using LABEL=2 when there's only one dataset on the tape.
88
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
S213 Abend
A disk dataset was not actually on the volume stated in the VOL=SER=.
A disk dataset was not actually on the volume indicated in the catalog.
S222 Abend
The job was cancelled because it violated some restriction.
No dump was requested.
S237 Abend
The block count on a tape trailer label is wrong.
Probably caused by hardware error.
Copy the file with IEBGENER, ignoring the error. The copy will be good.
A problem with the second volume of tape or disk.
S313, 314 Abend
An Input/output error in the VTOC of a disk volume. Inform support staff.
S322 Abend
The job used more CPU time than it should have.
Either the estimate is wrong or the program is in an uncontrollable loop.
S413 Abend
A volume was needed that could not be mounted.
S422 Abend
Too many job steps.
S513 Abend
Two jobs or DDNAMES wanting same tape at same time.
S522 Abend
Job was waiting too long.
S613 Abend
A bad tape label.
S637 Abend
A bad concatenation, different types of devices were used.
An unreadable tape mark or label.
S706 Abend
The program on the library was not executable.
See linkage editor report that put the program on library.
S713 Abend
The tape was unexpired and the operator terminated the job.
S714 Abend
Labels on the tape were bad.
S722 Abend
Too many lines of print.
S804 Abend
Region too small for the program.
S806 Abend
89
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Program not on the library. May need a JOBLIB or STEPLIB.
S80A Abend
Region too small for the program.
S813 Abend
Right tape volume, wrong dataset name. Right dataset name, wrong tape volume.
S913 Abend
Security violation.
SA13 Abend
Label=n states the wrong number.
SB14 Abend
No space in a library directory for this member's name.
SB37 Abend
Insufficient disk space.
SD37 Abend
Insufficient disk space.
SE37 Abend
Insufficient disk space.
the maximum number of extents would be exceeded. For instance, when exceeding 16
extents of a PDS. An E37 on tape datasets is most often caused when the number of
requested volumes is exceeded. The default is 5, therefore a request for the sixth
volume will fail with a E37.
S0C1 Abend
Executing a program with an unresolved external reference.
Calling a program and the program was not included during link edit.
An uncontrolled loop moved data on top of instructions. Reading a file that is not
open Your SORTIN DCB was not correct Mixing compile options RES and NORES in
different modules
S042Privileged Operation Abend
Read/write to unopened file
An uncontrolled loop moved data on top of instructions.
S0C4 Protection Abend
An uncontrolled loop moved data on top of instructions. referencing a field in a record
of a closed file referencing an item in Linkage-Section when there was no PARM= in
the JCL. Calling/called programs have different length for items passed in Linkage
Section with COBOL Sort, doing a STOP RUN or GOBACK while an input or output
procedure is still running
S0C5 Addressing Abend
See reasons as for 0C4.
Falling through into an ENTRY statement
Transferring control into the middle of a SORT procedure.
S0C6 Specification Abend
Bad boundary alignment for binary data.
See reasons for 0C4
90
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
S0C7 Abend
Program attempting to do math on illegal data.
Data is not numeric, but should be.
Moving ZEROS to group item whose subordinate items
are packed-decimal
Uninitialized packed-decimal fields.
Record description is wrong. Field starts or ends in the wrong place in the record.
Find record description of creating program.
S0CB Abend
Attempting to divide by 0 and not using ON SIZE ERROR
U1002 Abend
Conflicting file attributes. See S013.
U1005 Abend
Executing with modules compiled both with RES and NORES
U1006 Abend
Subscript out of range
U1017 Abend
Missing DD statement in JCL for DISPLAY or ACCEPT verb
U1020 Abend
Problem opening or processing a file.
Check the file status.
U1026 Abend
COBOL sort failed.
U1034 Abend
Same as SB37 Abend
U1035 Abend
Conflicting DCB parameters. Same as S013.
U1037 Abend
Program control falls through the last physical statement in program,
which is not GOBACK/STOP RUN.
U1056 Abend
Program didn't close a file before ending
U1066, U1075 Abend
Conflicting DCB information for file defined as EXTERNAL
U1072, U1073, U1074 Abend
Illegal numbers in reference modification
U3000 Abend
COBOL LE intercepted the Abend. Messages in SYSDBOUT.
U4038 Abend
COBOL LE intercepted the Abend. Messages in CEEDUMP
91
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 4: Utilidades y Objetos para el Reposicionamiento Batch.
ANEXO 4.1. DAREPOS.
En la tabla DAREPOS se guardará el estado actual de cada proceso y toda la
información necesaria para su reposicionamiento, cuando este fuese necesario.
Llamaremos clave de entrada o puntero a la información almacenada en DAREPOS,
que se utiliza para restablecer la situación del proceso al momento en el que se
produjo el error, para su rearranque.
El prefijo de la tabla DAREPOS es RUR y se compone de los siguientes campos:
Figura 5 - Campos de la tabla DAREPOS
DCLGEN DE LA TABLA DAREPOS
*******************************************************************************
* DCLGEN TABLE(DAREPOS)
*
LIBRARY(SIS.GRSIS.COPYLIB(D0204200))
*
ACTION(REPLACE)
*
APOST
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS
********************************************************************************
EXEC SQL DECLARE DAREPOS TABLE
( RUR_PLANNAME
CHAR(8) NOT NULL,
RUR_PROCES
DECIMAL(2, 0) NOT NULL,
RUR_ESTADO
CHAR(1) NOT NULL,
RUR_NUMCOMM
SMALLINT NOT NULL,
RUR_PUNTEROS
VARCHAR(254) NOT NULL
) END-EXEC.
********************************************************************************
* COBOL DECLARATION FOR TABLE DAREPOS
********************************************************************************
01 DCLDAREPOS.
10 RUR-PLANNAME
PIC X(8).
10 RUR-PROCES
PIC S99V USAGE COMP-3.
10 RUR-ESTADO
PIC X(1).
10 RUR-NUMCOMM
PIC S9(4) USAGE COMP.
10 RUR-PUNTEROS.
49 RUR-PUNTEROS-LEN
PIC S9(4) USAGE COMP.
49 RUR-PUNTEROS-TEXT PIC X(254).
********************************************************************************
* THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 5
********************************************************************************
(volver SoporteFísico)
(Ver #LQBBN01)
92
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 4.2 DAPROCBATCH.
La tabla DAPROCBATCH guarda información sobre los ficheros de salida de cada
proceso susceptible de ser reposicionado.
Debe darse de alta en esta tabla una línea por cada uno de los ficheros de salida que
tenga el proceso a reposicionar.
El prefijo de la tabla DAPROCBATCH es IPB y se compone de los siguientes campos:
Figura 6 - Campos de la tabla DAPROCBATCH
DCLGEN DE LA TABLA DAPROCBATCH
**************************************************************************
* DCLGEN TABLE(DBS1.EXP01.DAPROCBATCH)
*
LIBRARY(SIS.GRSIS.COPYLIB(D0204100))
*
ACTION(REPLACE)
*
APOST
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS
**************************************************************************
EXEC SQL DECLARE DAPROCBATCH TABLE
( IPB_PLANNAME
CHAR(8) NOT NULL,
IPB_DDNAME
CHAR(8) NOT NULL,
IPB_LONREG
SMALLINT NOT NULL,
IPB_LONBLK
SMALLINT NOT NULL,
IPB_REGTRK
SMALLINT NOT NULL,
IPB_DISPOS
CHAR(4) NOT NULL,
IPB_NUMREGS
SMALLINT NOT NULL,
IPB_TIPREG
CHAR(3) NOT NULL
) END-EXEC.
**************************************************************************
* COBOL DECLARATION FOR TABLE DAPROCBATCH
**************************************************************************
01 DCLDAPROCBATCH.
10 IPB-PLANNAME
PIC X(8).
10 IPB-DDNAME
PIC X(8).
10 IPB-LONREG
PIC S9(4) USAGE COMP.
10 IPB-LONBLK
PIC S9(4) USAGE COMP.
10 IPB-REGTRK
PIC S9(4) USAGE COMP.
10 IPB-DISPOS
PIC X(4).
10 IPB-NUMREGS
PIC S9(4) USAGE COMP.
10 IPB-TIPREG
PIC X(3).
(volver SoporteFísico)
(Ver #LQBBN01)
93
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 4.3. INCLUDES Y COPYS.
A continuación se describen las INCLUDES y COPYS que deben utilizarse para
estandarizar el uso de las tablas y de la rutina UR0000 dentro de los programas:
Existen unas copys que contienen campos de trabajo estándar para ser utilizados por
el programa de aplicación. Se encuentran en la librería: SIS.GRUR.COPYLIB.
URCOPYS.
Esta copy contiene las copys RURCOMM y RUROPER que se utilizan para
comunicarse con la rutina UR0000 que gestiona el tratamiento de los ficheros de
salida del proceso, dejando en ellas la información
necesaria para el mismo.
En RURCOMM deja información acerca del número de commit por el que vamos,
nombre del plan, el número de registros que se pasa en el JCL por los que hace
COMMIT e información sobre los ficheros de salida como el nombre de la ddname, el
blocaje, el tipo de dispositivo, número de registros por pista, etc. En RUROPER hay
información sobre las llamadas a la rutina UR0000, cuando está en inicio, al final, etc.
*****************************************************************
***
***
COPY RUROPER
***
*****************************************************************
01
RUR-OPER.
05 RUR-CALL
05 RUR-INIT
05 RUR-NEW
05 RUR-READ.
10 FILLER
10 RUR-READ-DD
05 RUR-SHR
05 RUR-DEL
05 RUR-END
PIC X(8) VALUE 'UR0000'.
PIC X(4) VALUE 'INIT'.
PIC X(4) VALUE 'NEW '.
PIC
PIC
PIC
PIC
PIC
X(4)
X(8)
X(4)
X(4)
X(4)
VALUE
VALUE
VALUE
VALUE
VALUE
'READ'.
SPACES.
'SHR '.
'DEL '.
'END '.
*****************************************************************
***
***
COPY RURCOMM
***
*****************************************************************
01
RURCOMM.
05 CA-OPER
05 CA-PARAM.
10 CA-PLANNAME
10 CA-PROCESO
10 CA-COMMIT
10 CA-NUMREG
10 CA-PREF
05 CA-PARMOK
88 PARMOK
05 CA-MSG
05 CA-PARM1
05 CA-PARM2.
10 CIRC
10 FILLER
10 CIEC
10 FILLER
10 CIIC
10 FILLER
10 CIRCX
10 CIECX
10 CIICX
05 CI-AMSG
05 CA-OCCUR
05 CA-DDNAMES.
06 CA-ELE-DDNAMES
10 CIDD
PIC X(4).
PIC X(8).
PIC 99.
PIC (4).
PIC S9(8) COMP.
PIC X(4).
PIC X.
VALUE 'S'.
PIC X(6).
PIC X(20).
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
999.
X.
9999.
X.
999.
X(2).
S9(4)
S9(4)
S9(4)
X(4).
S9(4)
COMP.
COMP.
COMP.
COMP.
OCCURS 50 TIMES.
PIC X(8).
94
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
10
10
10
10
10
10
10
10
10
CILDSN
CIDSN
CIPRI
CISEC
CIPOOL
CIBLK
CILRECL
CIREGTRK
CIDISPOS
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X.
X(30).
S9(4) COMP.
S9(4) COMP.
X(8).
S9(4) COMP.
S9(4) COMP.
S9(4) COMP.
X(4).
URMENSA.
Esta copy contiene campos generales para mensajes de error.
000100***************************************************************
000200***
000300***
COPY DE MENSAJES DE ERROR PARA PROGRAMAS BATCH
000400***
QUE USEN " REPOSICIONAMIENTO "
000500***
000600***************************************************************
000700
000800*
000900***
RUTINA DE CANCELACION UTILIZADA POR PROGRAMAS BATCH
001000*
001100
001200 01 XXCANCEL
PIC X(8)
VALUE 'XXCANCEL'.
001300
001400
001500*
001600***
CODIGOS DE MENSAJES :
001700*
001800
001900 01 UR-CODICAN
PIC 9(4)
VALUE 3700.
002000
002100 01 UR-OPEN-ERROR
PIC 9(4)
VALUE 3701.
002200 01 UR-FETCH-ERROR
PIC 9(4)
VALUE 3702.
002300 01 UR-CLOSE-ERROR
PIC 9(4)
VALUE 3703.
002400
002500 01 UR-SELECT-ERROR
PIC 9(4)
VALUE 3704.
002600 01 UR-UPDATE-ERROR
PIC 9(4)
VALUE 3705.
002700 01 UR-INSERT-ERROR
PIC 9(4)
VALUE 3706.
URSWITCH.
Copy que contiene " switches " generales utilizados por los programas de aplicación
generados por arquitectura, y un switch específico de relanzamiento para el caso de
los programas que utilizan
reposicionamiento y leen de un fichero secuencial.
000100*********************************************************
000200*
000300*
COPY QUE CONTIENE LOS " SWITCHES " UTILIZADOS
000400*
POR PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO.
000500*
000600*********************************************************
000700*
000800 01 FILLER
PIC X.
000900
88 HAY-ERROR-PROCESO
VALUE 'S'.
001000
88 NO-HAY-ERROR-PROCESO
VALUE 'N'.
001100
001200*
001300 01 FILLER
PIC X.
001400
88 FIN-PROCESO
VALUE 'S'.
001500
88 NO-FIN-PROCESO
VALUE 'N'.
001600
001700*
001800 01 SW-ERROR
PIC X.
001900
88 SI-ERROR
VALUE 'S'.
002000
88 NO-ERROR
VALUE 'N'.
002100
002200*
002300 01 SW-FIN-DATOS
PIC X.
95
Software Factory
Cáceres –
002400
002500
002600
002700*--002800*--002900
003000 01
003100
003200
88 FIN-DATOS
88 NO-FIN-DATOS
Rafael Campillo Lorenzo.
VALUE 'S'.
VALUE 'N'.
SOLO PARA PROGRAMAS QUE UTILIZEN FICHERO SECUENCIAL
DE ENTRADA.
SW-RELANZAMIENTO
88 SI-RELANZAMIENTO
88 NO-RELANZAMIENTO
PIC X.
VALUE 'S'.
VALUE 'N'.
URSQLCOD
Campos para el control del SQLCODE.
000100*****************************************************************
000200***
000300***
COPY PARA EL CONTROL DE SQLCODE UTILIZADO PARA
000400***
PROGRAMAS BATCH QUE UTILICEN REPOSICIONAMIENTO
000500***
Y UTILICEN TABLAS DB2 DE ENTRADA AL PROCESO.
000600***
(EJEMPLO PARA 4 CURSORES DE REPOSICIONAMIENTO).
000700***
000800*****************************************************************
000900*
001000 01
UR-SQL-CUR1
PIC S9(9) COMP.
001100 01
UR-SQL-CUR2
PIC S9(9) COMP.
001200 01
UR-SQL-CUR3
PIC S9(9) COMP.
001300 01
UR-SQL-CUR4
PIC S9(9) COMP.
001400
001500*
001600*** SWITCH QUE INDICA EL CURSOR QUE ESTA ABIERTO EN ESE MOMENTO
001700*
001800 01 SW-UR-CSR
PIC X.
001900
88 UR-CSR1
VALUE '1'.
002000
88 UR-CSR2
VALUE '2'.
002100
88 UR-CSR3
VALUE '3'.
002200
88 UR-CSR4
VALUE '4'.
URWORK
Copy que contiene campos de trabajo estándar específicos para programas batch que
utilicen reposicionamiento.
.
000100*****************************************************************
000200***
000300***
COPY QUE CONTIENE LOS CAMPOS DE TRABAJO UTILIZADOS
000400***
EN PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO.
000500***
000600*****************************************************************
000700*
000800 01
UR-CONT-REG
PIC S9(8) COMP.
000900
001000*
001100 01
UR-CEROS
PIC S9(4) COMP VALUE ZEROES.
001200 01
UR-PROCESO
PIC S9(2) COMP-3.
001300 01
UR-COMMIT
PIC S9(4) COMP.
001400
001500*--- CAMPOS PARA GUARDAR LA ULTIMA CLAVE LEIDA DE LA TABLA.
001600*--- SOLO PARA PROGRAMAS QUE UTILIZAN TABLAS DB2 DE ENTRADA.
001700
001800 01
UR-VALOR-CURSOR.
001900
49 UR-VALOR-CURSOR-LEN
PIC S9(4) COMP.
002000
49 UR-VALOR-CURSOR-TEXT
PIC X(254).
002100
002200*--- CAMPOS PARA GUARDAR EL ULTIMO REGISTRO LEIDO DEL FICHERO.
002300*--- PARA PROGRAMAS QUE UTILIZAN FICHEROS SECUENCIALES DE ENTRAD
002400
002500 01
UR-VALOR-REGISTRO.
002600
49 UR-VALOR-REGISTRO-LEN
PIC S9(4) COMP.
002700
49 UR-VALOR-REGISTRO-TEXT
PIC X(254).
96
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
URDCLGEN
Dclgen de DAREPOS: Tabla para guardar los punteros para el reposicionamiento.
*****************************************************************
* DCLGEN TABLE(DAREPOS)
*
LIBRARY(SIS.GRSIS.COPYLIB(D0204200))
*
ACTION(REPLACE)
*
APOST
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS
*****************************************************************
EXEC SQL DECLARE DAREPOS TABLE
( RUR_PLANNAME
CHAR(8) NOT NULL,
RUR_PROCES
DECIMAL(2, 0) NOT NULL,
RUR_ESTADO
CHAR(1) NOT NULL,
RUR_NUMCOMM
SMALLINT NOT NULL,
RUR_PUNTEROS
VARCHAR(254) NOT NULL
) END-EXEC.
*****************************************************************
* COBOL DECLARATION FOR TABLE DAREPOS
*****************************************************************
01 DCLDAREPOS.
10 RUR-PLANNAME
PIC X(8).
10 RUR-PROCES
PIC S99V USAGE COMP-3.
10 RUR-ESTADO
PIC X(1).
10 RUR-NUMCOMM
PIC S9(4) USAGE COMP.
10 RUR-PUNTEROS.
49 RUR-PUNTEROS-LEN
PIC S9(4) USAGE COMP.
49 RUR-PUNTEROS-TEXT PIC X(254).
*****************************************************************
* THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 5
*****************************************************************
URCURSOR
Copy que incluye el cursor for update de DAREPOS.
00100*****************************************************************
000200***
000300***
COPY QUE INCLUYE EL CURSOR FOR UPDATE DE DAREPOS
000400***
(TABLA EN LA QUE SE GUARDAN LOS PUNTEROS UTILIZADOS
000500***
PARA REALIZAR REPOSICIONAMIENTO EN PROGRAMAS BATCH).
000501***
000510***
PARA PROGRAMAS QUE LLAMAN A LA RUTINA "UR0000".
000600***
000700*****************************************************************
000800
000900
EXEC SQL
001000
DECLARE REP CURSOR FOR
001100
SELECT RUR_PLANNAME,
001200
RUR_PROCES,
001300
RUR_ESTADO,
001400
RUR_NUMCOMM,
001500
RUR_PUNTEROS
001600
FROM DAREPOS
001700
WHERE RUR_PLANNAME = :CA-PLANNAME
001800
AND RUR_PROCES
= :UR-PROCESO
001900
FOR UPDATE OF RUR_ESTADO, RUR_NUMCOMM, RUR_PUNTEROS
002000
END-EXEC.
(volver SoporteFísico)
(Ver #LQBBN01)
97
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 4.4 FUNCIONES. XX_CANCELACION_PROCESOS_BATCH.
Se utiliza en los procesos Batch para cancelar la ejecución de un programa por
cualquier tipo de error. Utiliza los siguientes parámetros:
Figura 7 - Parámetros de la función XX_CANCELACION_PROCESOS_BATCH
(volver SoporteFísico)
(Ver #LQBBN01)
98
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 4.5. JCL REPOSICIONAMIENTO
CLEARCOM
Esta utilidad se ejecuta antes de los programas de aplicación para comprobar el
estado del proceso y lo prepararlo para su ejecución desde el principio o para su
reposicionamiento. Realiza las siguientes funciones:
1. Comprobación del estado del proceso y el número de confirmaciones
realizadas.
Para ello consulta la tabla DAREPOS.
- Si no encuentra el registro correspondiente al plan/proceso considera que es la
primera ejecución.
- Si el proceso se encuentra en un estado distinto del inicial (P) o el intermedio
(C), devuelve un mensaje de aviso, pero acaba con código de retorno “0”.
2. Consulta la tabla DAPROCBATCH.
Para saber cual es la DDNAME de los ficheros de salida alocados dinámicamente y
poder construir su nombre.
3. Borrado de los ficheros de salida no confirmados.
En caso de que el proceso se encuentre en estado intermedio (C), se eliminan los
ficheros de salida correspondientes a los últimos datos procesados y NO confirmados.
JCLREPOS: JCL de ejecución del programa con Clist para borrado del último fichero
de COMMIT en caso de relanzar el programa.
//SI4MAAB
JOB (DES),'*** MANUAL ***',NOTIFY=SI4MAA,
//
CLASS=2,MSGCLASS=X,MSGLEVEL=1,REGION=2M
//*
//**----------------------------------------------------------------//**
CLEARCOM : BORRADO DEL ULTIMO FICHERO DE COMMIT EN EL
//**
CASO DE QUE SEA NECESARIO RELANZAR EL PROCESO.
//**----------------------------------------------------------------//*
//CLEARCOM EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=3M,COND=(0,NE)
//ISPCTL0 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)),
//
DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB)
//ISPCTL1 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)),
//
DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB)
//ISPCTL2 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)),
//
DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB)
//ISPCTL3 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)),
//
DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB)
//ISPSLIB DD DSN=ISP.V3R2M0.ISPSLIB,DISP=SHR
//
DD DSN=ISR.V3R2M0.ISRSENU,DISP=SHR
//ISPPROF DD DSN=&PROFILE,SPACE=(TRK,(1,1,1)),UNIT=DISKDES,
//
DCB=(DSORG=PO,LRECL=80,BLKSIZE=3200),
//
DISP=(NEW,DELETE,DELETE)
//ISPPLIB DD DSN=ISP.V3R2M0.ISPPENU,DISP=SHR
//
DD DSN=ISR.V3R2M0.ISRPENU,DISP=SHR
//
DD DSN=SIS.GRAR.PLIB,DISP=SHR
//ISPMLIB DD DSN=SIS.ISPF.MLIB,DISP=SHR
//
DD DSN=ISR.V3R2M0.ISRMENU,DISP=SHR
//
DD DSN=ISP.V3R2M0.ISPMENU,DISP=SHR
//
DD DSN=SIS.GRAR.MLIB,DISP=SHR
//ISPTLIB DD DSN=ISP.V3R2M0.ISPTENU,DISP=SHR
//
DD DSN=SIS.GRAR.TABL,DISP=SHR
//ISPTABL DD DSN=SIS.GRAR.TABL,DISP=SHR
99
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
//ISPLLIB DD DSN=SIS.GRAR.PGM,DISP=SHR
//SYSUADS DD DSN=SYS1.UADS,DISP=SHR
//ISPLOG
DD SYSOUT=*
//SYSPROC DD DSN=ISR.V3R2M0.ISRCLIB,DISP=SHR
//
DD DSN=SIS.ISPF.CLIST,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//RURMSG
DD SYSOUT=*
//SYSTSIN DD *
PROFILE NOPREFIX
ISPSTART CMD(%URCLEARU PL( D) NR( ) NP(1) PX(DES ) DB2(DBD1))
/*
(Ver #EJEMPLOJCL)
100
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 5. Enfrentamiento de ficheros.
Hay procesos en los que se necesita comparar registros de un fichero con registros de
otro u otros ficheros. Esto se conoce como enfrentamiento de ficheros. Para poder
aplicar esta técnica, se requiere que los ficheros sean secuenciales y que estén
ordenados por un mismo campo. Este campo será la clave, por la que vamos a
comparar ambos ficheros.
Podemos enfrentar dos ficheros para fusionarlos en un tercero ordenado, para obtener
datos y tratarlos etc.
Lo único que hemos de tener en cuenta es que cuando se llegue al final de uno de los
ficheros, se ponga la clave a HIGH-VALUES, ya que en ese caso podremos seguir
leyendo del otro fichero y comparar las claves de ambos ficheros. La clave del fichero
que aún no se ha terminado de leer siempre será menor que la del otro que está a
HIGH-VALUES. (∞)
Ejemplo de fusión de dos ficheros en un tercero mediante enfrentamiento de ficheros:
<INICIO> Se abren los ficheros a enfrentar y el de salida. Se lee el primer registro
de cada fichero.
PERFORM 2000-PROCESO-ENFRENTAMIENTO
THRU 2000-PROCESO-ENFRENTAMIENTO-EXIT
UNTIL (CLAVE1 <> HIGH-VALUES OR CLAVE2 <> HIGH-VALUES)
<FIN> Se cierran los tres ficheros.
2000-PROCESO-ENFRENTAMIENTO.
IF
CLAVE1 LESS THAN
CLAVE2
<Mover los campos del Fichero1 al Fichero3>
<Escribir en el Fichero3>
PERFORM 9100-LEER-FICHERO1
THRU 9100-LEER-FICHERO1-EXIT
ELSE
IF
CLAVE1 GREATER THAN
CLAVE2
<Mover los campos del Fichero2 al Fichero3>
<Escribir en el Fichero3>
PERFORM 9200-LEER-FICHERO2
THRU 9200-LEER-FICHERO2-EXIT
ELSE
<Mover los campos del Fichero1 ó del Fichero2 al Fichero3>
<Escribir en el Fichero3>
PERFORM 9100-LEER-FICHERO1
THRU 9100-LEER-FICHERO1-EXIT
PERFORM 9200-LEER-FICHERO2
THRU 9200-LEER-FICHERO2-EXIT
END-IF
END-IF
.
2000-PROCESO-ENFRENTAMIENTO-EXIT.
EXIT.
101
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
9100-LEER-FICHERO1 (= Para LEER-FICHERO2)
READ FICHERO1 INTO <COPY-FICHERO1>
AT END
SET SW-SI-FIN-FICHERO1 TO TRUE
MOVE HIGH-VALUES
TO CLAVE1
END-READ
IF FS-FICHERO1
NOT EQUAL CA-FICH-OK
NOT EQUAL CA-FIN-FICH
AND
PERFORM 9300-ERROR-FICHERO
THRU 9300-ERROR-FICHERO-EXIT
END-IF
.
9100-LEER-FICHERO1
EXIT.
(Ver #S410UNIDADCOMM
102
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO-SORT
ORDENACIÓN BÁSICA
Figura 8 - SORT - Ordenacion básica
103
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ORDENACIÓN PARCIAL
Figura 9 - SORT - Ordenacion parcial
104
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
COPIA DE UN FICHERO
Figura 10 - SORT - Copia de un fichero
105
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
COPIA PARCIAL DE UN FICHERO
Figura 11 - SORT - Copia parcial de un fichero
106
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ORDENAR Y CAMBIAR DISPOSICIÓN DE CAMPOS
Figura 12 - SORT - Ordena y cambia disposicion de campos
107
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ELIMINAR REPETIDOS
Figura 13 - SORT - Eliminar repetidos
108
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ACUMULAR
Figura 14 - SORT - Acumular
OPERADORES Y TIPOS DE DATOS
- Para hacer referencia a los tipos de datos según su origen, se utilizan los
siguiente operadores:
o PZ:
PIC 9()
Numérico display
o PD:
PIC 9() COMP-3
Numérico empaquetado
o BI:
PIC 9() COMP
Numérico binario
o CH:
PIC x()
Alfanumérico
- Para las comparación de mayor, menor, etc; se utilizaran los siguientes
operadores:
o GT:
Mayor que
o EQ:
Igual
o LT:
Menor que
109
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
110
ANEXO 6. just enough ispf
Creating a PDS/Library
Option 3, Utility, from the main menu
Menu Utilities Compilers Options Status Help
-----------------------------------------------------------------------------ISPF Primary Option Menu
Option ===> 3
0 Settings
Terminal and user parameters
User ID . : userid
1 View
Display source data or listings
Time. . . : 06:49
2 Edit
Create or change source data
Terminal. : 3278
3 Utilities
Perform utility functions
Screen. . : 1
4 Foreground
Interactive language processing
Language. : ENGLISH
5 Batch
Submit job for language processing
Appl ID . : ISR
6 Command
Enter TSO or Workstation commands
TSO logon : TRAINING
7 Dialog Test
Perform dialog testing
TSO prefix: userid
8 LM Facility
Library administrator functions
System ID : SYS1
Enter X to Terminate using log/list defaults
Then option 2 from Utility menu, “dataset utility”
Menu Help
-----------------------------------------------------------------------------Utility Selection Panel
Option ===> 2
1 Library
Compress or print data set. Print index listing. Print,
rename, delete, browse, edit or view members
2 Data Set
Allocate, rename, delete, catalog, uncatalog, or display
information of an entire data set
3 Move/Copy
Move, copy, or promote members or data sets
4 Dslist
Print or display (to process) list of data set names.
Print or display VTOC information
5 Reset
Reset statistics for members of ISPF library
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Choose M for enhanced allocate
(if there is no M, use A)
Menu RefList Utilities Help
-----------------------------------------------------------------------------Data Set Utility
Option ===> M
A Allocate new data set
C Catalog data set
R Rename entire data set
U Uncatalog data set
D Delete entire data set
S Data set information (short)
blank Data set information
M Enhanced data set allocation
V VSAM Utilities
ISPF Library:
Project . .
Group . . .
Type . . . .
Other Partitioned, Sequential or VSAM Data Set:
Data Set Name . . . 'userid.CLASS.CNTL'
Press ENTER
Menu
RefList
Utilities
Help
Allocate New Data Set ----------------------------.
Command ===>
Data Set Name . . . . : userid.CLASS.CNTL
Management class. . . .
(Blank for default management class)
Storage class . . . . .
(Blank for default storage class)
Volume serial . . . .
(Blank for authorized default volume)
Data class . . . . . .
(Blank for default data class)
Space units . . . . . TRACK
(BLKS, TRKS, CYLS, KB, MB or BYTES)
Primary quantity. . . 10
(In above units)
Secondary quantity. . 5
(In above units)
Directory blocks. . . 10
(Zero for sequential data set) *
Record format . . . . FB
Record length . . . . 80
Block size . . . . . 0
Data Set Name type. . PDS
(LIBRARY, HFS, PDS, or blank) *
Expiration date . . .
(YY/MM/DD, YYYY/MM/DD
Enter "/" to select option
DDDD for retention period in days
Type in attributes like the ones shown in bold. If your installation has other standards, use them.
Then go to the Editor
type =2, then ENTER
112
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Menu RefList RefMode Utilities LMF Workstation Help
-----------------------------------------------------------------------------Edit Entry Panel
Command ===>
ISPF Library:
Project . . .
Group . . . .
. . .
. . .
. . .
Type . . . .
Member . . .
(Blank or pattern for member selection list)
Other Partitioned or Sequential Data Set:
Data Set Name . . . 'userid.CLASS.CNTL(NEWMEMB)'
Volume Serial . . .
(If not cataloged)
Initial Macro . .
Profile Name . . .
Format Name . . .
Data Set Password
.
.
.
.
.
.
.
.
Options
/ Confirm Cancel/Move/Replace
Mixed Mode
Edit on Workstation
Type in the name of your new library, as well as a member name as shown. Then press ENTER
You have to do it this way on this screen, if it’s the first time you’re
editing this PDS/Library.
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
==MSG> -Warning- The UNDO command is not available until you change
==MSG>
your edit profile using the command RECOVERY ON.
''''''
113
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Before typing anything in, check your profile
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Command ===>
PROFILE
Scroll ===> CSR
****** ***************************** Top of Data ******************************
==MSG> -Warning- The UNDO command is not available until you change
==MSG>
your edit profile using the command RECOVERY ON.
''''''RECOVERY OFF NULLS OFF CAPS ON
''''''
''''''
''''''
To adjust your profile: you can't go wrong with these commands:
for CNTL, DATA, use these:. RECOVERY ON;RENUM;UNNUM;NULLS ON ALL
for COBOL, use these:
RECOVERY ON;RENUM;UNNUM;RENUM COB;NULLS ON ALL
Line numbers are recommended for COBOL, cause trouble with all other types.
****** **************************** Bottom of Data ****************************
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Comman ===> RECOVERY ON;RENUM;UNNUM;NULLS ON ALL: (see note above)
Scroll ===> CSR
****** ***************************** Top of Data ******************************
****** **************************** Bottom of Data ****************************
RESET will remove the PROFILE display
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Command ===>
RESET
Scroll ===> CSR
114
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Now insert some lines of jcl or data. I8 will open up 8 blank lines for you to type in.
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Command ===>
Scroll ===> CSR
I8
***************************** Top of Data ******************************
****** **************************** Bottom of Data ****************************
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
''''''
''''''
''''''
''''''
****** **************************** Bottom of Data ****************************
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Command ===>
Scroll ===> CSR
_
****** ***************************** Top of Data ******************************
'''''' //useridA JOB (xxxx),’SAL MONELLA’,CLASS=c,MSGCLASS=m,
'''''' //
NOTIFY=userid,TIME=(,5)
'''''' //STEP1
EXEC PGM=IEFBR14
''''''
Replace userid by your userid
xxxx by your company’s accounting information,
c by the proper testing class, and m by the proper held print class used in testing
115
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.00
Columns 00001 00072
Command ===> SUBMIT
Scroll ===> CSR
****** ***************************** Top of Data ******************************
'''''' //useridA JOB (xxxx),’SAL MONELLA’,CLASS=c,MSGCLASS=m,
'''''' //
NOTIFY=userid,TIME=(,5)
'''''' //STEP1
EXEC PGM=IEFBR14
''''''
''''''
If it’s JCL you’re doing, you may submit it.
Save and exit by pressing PF3
Then get into SDSF to view JCL job's output
Use the menu numbers in use at your company.
Display Filter View Print Options Help
------------------------------------------------------------------------------V1R6M0 ------------------ SDSF PRIMARY OPTION MENU -------------------------COMMAND INPUT ===> H
SCROLL ===> PAGE
Type an option or command and press Enter.
DA
I
O
H
ST
-
Display
Display
Display
Display
Display
active users in the sysplex
jobs in the JES2 input queue
jobs in the JES2 output queue
jobs in the JES2 held output queue
status of jobs in the JES2 queues
TUTOR
END
- Short course on SDSF (ISPF only)
- Exit SDSF
116
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Display Filter View Print Options Help
------------------------------------------------------------------------------SDSF HELD OUTPUT DISPLAY ALL CLASSES LINES 36,115
LINE 1-13 (29)
COMMAND INPUT ===> PREFIX userid*
SCROLL ===> PAGE
NP
JOBNAME JOBID
OWNER
PRTY C ODISP DEST
TOT-REC TOT-
Tell SDSF to display jobs starting with your userid, only.
Display Filter View Print Options Help
------------------------------------------------------------------------------SDSF HELD OUTPUT DISPLAY ALL CLASSES LINES 36,115
LINE 1-13 (29)
COMMAND INPUT ===>
SCROLL ===> PAGE
NP
JOBNAME JOBID
OWNER
PRTY C ODISP DEST
TOT-REC TOT?
useridW JOB00669 userid
144 H HOLD LOCAL
664
useridX JOB00648 userid
144 H HOLD LOCAL
240
? next to the job name breaks the job down into separate print files
Display Filter View Print Options Help
------------------------------------------------------------------------------SDSF JOB DATA SET DISPLAY - JOB useridW (JOB00669)
LINE 1-6 (6)
COMMAND INPUT ===>
SCROLL ===> PAGE
NP
DDNAME
STEPNAME PROCSTEP DSID OWNER
C DEST
REC-CNT PAGE
JESMSGLG JES2
2 userid H LOCAL
17
JESJCL
JES2
3 userid H LOCAL
51
JESYSMSG JES2
4 userid H LOCAL
110
SYSPRINT STEP1
COB2
103 userid H LOCAL
97
SYSPRINT STEP1
LKED
104 userid H LOCAL
387
SYSOUT
STEP1
GO
109 userid H LOCAL
2
Display Filter View Print Options Help
------------------------------------------------------------------------------SDSF JOB DATA SET DISPLAY - JOB useridW (JOB00669)
LINE 1-6 (6)
COMMAND INPUT ===>
SCROLL ===> PAGE
NP
DDNAME
STEPNAME PROCSTEP DSID OWNER
C DEST
REC-CNT PAGE
JESYSMSG JES2
4 userid Q LOCAL
110
SYSPRINT STEP1
COB2
103 userid Q LOCAL
97
SYSPRINT STEP1
LKED
104 userid Q LOCAL
387
S
SYSOUT
STEP1
GO
109 userid Q LOCAL
2
Select the print file you want with S
117
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Display Filter View Print Options Help
------------------------------------------------------------------------------SDSF OUTPUT DISPLAY useridC JOB00985 DSID
109 LINE 0
COLUMNS 02- 81
COMMAND INPUT ===>
SCROLL ===> PAGE
********************************* TOP OF DATA **********************************
THIS IS PROGRAM ABCDEF WRITTEN BY MOE SCHMOE
******************************** BOTTOM OF DATA ********************************
Display Filter View Print Options Help
------------------------------------------------------------------------------SDSF HELD OUTPUT DISPLAY ALL CLASSES LINES 662
LINE 1-1 (1)
COMMAND INPUT ===>
SCROLL ===> PAGE
NP
JOBNAME JOBID
OWNER
PRTY C ODISP DEST
TOT-REC TOTP
useridC JOB00985 userid
144 Q HOLD LOCAL
662
If you have finished, Purge the print file
118
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
The list of files, and a few Editing features
Have ISPF show you a list of your files
=3;4, then ENTER
Menu RefList RefMode Utilities Help
-----------------------------------------------------------------------------Data Set List Utility
Option ===>
blank Display data set list
V Display VTOC information
P Print data set list
PV Print VTOC information
Enter one or both of the parameters below:
Dsname Level . . . userid
Volume serial . .
Data set list options
Initial View . . . 1
1.
2.
3.
4.
Volume
Space
Attrib
Total
Enter "/" to select option
/ Confirm Data Set Delete
/ Confirm Member Delete
The following actions will be available when the list is displayed:
Enter a "/" on the data set list command field for command prompt pop-up.
Enter TSO commands, CLIST, REXX execs, or "=" to execute previous command.
Type in your userid
Then press ENTER
From http://www.theamericanprogrammer.com commercial use or resale of this document is a violation of copyright laws.
119
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Menu Options View Utilities Compilers Help
-----------------------------------------------------------------------------DSLIST - Data Sets Matching userid
Row 1 of 26
Command ===>
Scroll ===> CSR
Command - Enter "/" to select action
Message
Volume
------------------------------------------------------------------------------E
userid.CLASS.CNTL
TSO001
userid.CLASS.COBOL
TSO001
userid.ISPF.PROFILE
TSO001
Type E, to edit your PDS/Library
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL
Member List
Command ===> S NEWMEMB
Scroll ===> CSR
****** ***************************** Top of Data ******************************
MEMBER1
MEMBER2
MEMBER3
A list of members appears. (There may be none in the list)
Type S next to the name of the member you wish to edit
If the name does not appear on the list, type S membername on the command line
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
HELLO THIS IS A TEST
THIS IS LINE 2
THIS IS LINE 3
****** **************************** Bottom of Data ****************************
For the sake of example, type in these three lines
File Edit Confirm Menu Utilities Compilers Test Help
-------------------------------------------------------------------------------
120
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
_
****** ***************************** Top of Data ******************************
M
HELLO THIS IS A TEST
000002 THIS IS LINE 2
A
THIS IS LINE 3
****** **************************** Bottom of Data ****************************
Moving the first line after the last
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 THIS IS LINE 2
000002 THIS IS LINE 3
000003 HELLO THIS IS A TEST
****** **************************** Bottom of Data ****************************
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
C
THIS IS LINE 2
000002 THIS IS LINE 3
A
HELLO THIS IS A TEST
****** **************************** Bottom of Data ****************************
Now copy the first line after the last
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 THIS IS LINE 2
000002 THIS IS LINE 3
121
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
000003 HELLO THIS IS A TEST
000004 THIS IS LINE 2
****** **************************** Bottom of Data ****************************
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 THIS IS LINE 2
000002 THIS IS LINE 3
R
HELLO THIS IS A TEST
000004 THIS IS LINE 2
****** **************************** Bottom of Data ****************************
Now repeat the third line
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 THIS IS LINE 2
000002 THIS IS LINE 3
000003 HELLO THIS IS A TEST
000004 HELLO THIS IS A TEST
000005 THIS IS LINE 2
****** **************************** Bottom of Data ****************************
122
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 THIS IS LINE 2
000002 THIS IS LINE 3
D
HELLO THIS IS A TEST
000004 HELLO THIS IS A TEST
000005 THIS IS LINE 2
****** **************************** Bottom of Data ****************************
Delete a line
File Edit Confirm Menu Utilities Compilers Test Help
------------------------------------------------------------------------------EDIT
userid.CLASS.CNTL(NEWMEMB) - 01.01
Columns 00001 00072
Command ===>
Scroll ===> CSR
****** ***************************** Top of Data ******************************
MM
THIS IS LINE 2
MM
THIS IS LINE 3
000003 HELLO THIS IS A TEST
A
THIS IS LINE 2
****** **************************** Bottom of Data ****************************
move the first two lines after the last
123
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Taming TSO Version 4
Choose Option 0 from the main menu, settings
Menu Utilities Compilers Options Status Help
-----------------------------------------------------------------------------ISPF Primary Option Menu
Option ===> 0
0 Settings
Terminal and user parameters
User ID . : userid
1 View
Display source data or listings
Time. . . : 06:49
2 Edit
Create or change source data
Terminal. : 3278
3 Utilities
Perform utility functions
Screen. . : 1
4 Foreground
Interactive language processing
Language. : ENGLISH
5 Batch
Submit job for language processing
Appl ID . : ISR
6 Command
Enter TSO or Workstation commands
TSO logon : TRAINING
Enter X to Terminate using log/list defaults
Log/List Function keys Colors Environ Workstation Identifier Help
-----------------------------------------------------------------------------ISPF Settings
Command ===>
Options
Print Graphics
Enter "/" to select option
Family printer type 2
/ Command line at bottom
Device name . . . .
/ Panel display CUA mode
Aspect ratio . . . 0
/ Long message in pop-up
/ Tab to action bar choices
/ Tab to point-and-shoot fields
General
/ Restore TEST/TRACE options
Input field pad . . N
/ Session Manager mode
Command delimiter . ;
/ Jump from leader dots
/ Edit PRINTDS Command
/ Always show split line
Terminal Characteristics
Screen format
1 1. Data
2. Std
3. Max
4. Part
Terminal Type
3
1. 3277
2. 3277A
3. 3278
4. 3278A
You can safely remove all the slashes
Log/List Function keys Colors Environ Workstation Identifier Help
------------------------------------------------------------------------------
124
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ISPF Settings
Command ===>
Options
Print Graphics
Enter "/" to select option
Family printer type 2
Command line at bottom
Device name . . . .
Panel display CUA mode
Aspect ratio . . . 0
Long message in pop-up
Tab to action bar choices
Tab to point-and-shoot fields
General
Restore TEST/TRACE options
Input field pad . .
Session Manager mode
Command delimiter . ;
Jump from leader dots
Edit PRINTDS Command
Always show split line
Terminal Characteristics
Screen format
1 1. Data
Terminal Type
3
2. Std
1. 3277
3. Max
2. 3277A
4. Part
3. 3278
4. 3278A
ENTER or PF3 will save your choices
Log/List Function keys Colors Environ Workstation Identifier Help
-----------------------------------------------------------------------------ISPF Settings
Command ===>
Options
Print Graphics
Enter "/" to select option
Family printer type 2
Command line at bottom
Device name . . . .
Panel display CUA mode
Aspect ratio . . . 0
Long message in pop-up
Tab to action bar choices
Tab to point-and-shoot fields
General
Restore TEST/TRACE options
Input field pad . .
Terminal Type
3
1. 3277
5. 3290A
9. 3278KN
2. 3277A
6. 3278T
10. 3278AR
3. 3278
7. 3278CF
11. 3278CY
4. 3278A
8. 3277KN
12. 3278HN
Put the cursor on LOG/LIST, press ENTER
Log/List Function keys Colors Environ Workstation Identifier Help
.-------------------------------------. --------------------------------------
125
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
1
1. Log Data set defaults
tings
2. List Data set defaults
3. List Data set characteristics
4. JCL...
Print Graphics
'-------------------------------------'
Family printer type 2
Command line at bottom
Device name . . . .
Panel display CUA mode
Aspect ratio . . . 0
Long message in pop-up
Tab to action bar choices
Tab to point-and-shoot fields
General
Restore TEST/TRACE options
Input field pad . .
Session Manager mode
Command delimiter . ;
Jump from leader dots
Edit PRINTDS Command
Always show split line
More:
+
Type 1 for LOG, press ENTER
Log/List Function keys Colors Environ Workstation Identifier Help
- .------------------------- ISPF Settings --------------------------. ------Log Data Set Defaults
Process option . . . 2
SYSOUT class . .
Local printer ID
writer-name . .
Lines per page .
Primary pages .
Secondary pages
Log Message ID .
1. Print data set and delete
2. Delete data set (without printing)
3. Keep data set (append subsequent
information to same data set)
4. Keep data set and allocate new data
set
. . . . A
or
. . . .
. . . . 60
. . . . 0
. . . . 0
. . . .
(/ = Yes)
:
+
I suggest option 2 - to delete the log. Also put zeros on the pages to be printed
Now to take care of the List
Log/List Function keys Colors Environ Workstation Identifier Help
-----------------------------------------------------------------------------ISPF Settings
Command ===>
126
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Options
Enter "/" to select option
Command line at bottom
Panel display CUA mode
Long message in pop-up
Tab to action bar choices
Tab to point-and-shoot fields
Restore TEST/TRACE options
Session Manager mode
Jump from leader dots
Edit PRINTDS Command
Always show split line
Terminal Characteristics
Screen format
1 1. Data
Terminal Type
3
1. 3277
Print Graphics
Family printer type 2
Device name . . . .
Aspect ratio . . . 0
General
Input field pad . .
Command delimiter . ;
2. Std
3. Max
2. 3277A
4. Part
3. 3278
4. 3278A
Put the cursor on LOG/LIST, press ENTER
Log/List Function keys Colors Environ Workstation Identifier Help
.-------------------------------------. -------------------------------------2 1. Log Data set defaults
tings
2. List Data set defaults
3. List Data set characteristics
More:
+
4. JCL...
Print Graphics
'-------------------------------------'
Family printer type 2
Command line at bottom
Device name . . . .
Panel display CUA mode
Aspect ratio . . . 0
Long message in pop-up
Tab to action bar choices
Tab to point-and-shoot fields
General
Restore TEST/TRACE options
Input field pad . .
Session Manager mode
Command delimiter . ;
Type 2 for LIST, press ENTER
Log/List Function keys Colors Environ Workstation Identifier Help
- .------------------------- ISPF Settings --------------------------. ------List Data Set Defaults
C
Process option . . . 4 1. Print data set and delete
:
+
O
2. Delete data set (without printing)
127
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
SYSOUT class . .
Local printer ID
writer-name . .
Lines per page .
Primary pages .
Secondary pages
*** List already
3. Keep data set (append subsequent
information to same data set)
4. Keep data set and allocate new data
set
. . . . A
or
. . . .
. . . . 60
. . . . 100
. . . . 200
allocated ***
I suggest option 4 - do nothing with the List
128
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
The Keys and Keylists
If you want to have one set of keys and their meanings
on every ISPF panel, you can disable keylists.
If you prefer to have every panel with a different set of keys, leave things alone.
In Settings, put the cursor on Function keys, press enter
Log/List Function keys Colors Environ Workstation Identifier H
--------- .-----------------------------------. ---------------------|
1. Non-Keylist PF Key settings |
Command = |
2. Keylist settings...
|
|
3. Tailor function key display |
Mor
Options
|
4. Show all function keys
| Graphics
Enter " |
5. Show partial function keys | ly printer type 2
Comm |
*. Remove function key display | ce name . . . .
Pane |
*. Use private and shared
| ct ratio . . . 0
/ Long |
8. Use only shared
|
Tab |
9. Disable keylists
|
Tab |
*0. Enable keylists
| l
Rest '-----------------------------------' t field pad . . N
Session Manager mode
Command delimiter . ;
/ Jump from leader dots
Edit PRINTDS Command
Always show split line
-----------------------------------Menu RefList RefMode Utilities Workstation Help
---------------------------------------------------------------------View Entry Panel
Command ===>
ISPF Library:
Project . . .
Group . . . .
. . .
. . .
. . .
Type . . . .
Member . . .
(Blank or pattern for member selectio
Other Partitioned or Sequential Data Set:
129
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Data Set Name . . .
Volume Serial . . .
(If not cataloged)
Workstation File:
File Name . . . . .
Initial Macro . .
Profile Name . . .
Format Name . . .
Data Set Password
.
.
.
.
.
.
.
.
Options
/ Confirm Cancel/Move/Replace
/ Browse Mode
View on Workstation
130
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Removing Key Captions
Command ===> PFSHOW OFF
Scroll ===> PAGE
Another suggestion: Get rid of the key captions from the bottom of your screen.
since scrolling is unaware of the key captions (which means they hide important information!)
Type PFSHOW OFF on any command line.
------------------------------------------------- Table of Contents ------------------------------------------------Creating a PDS/Library
Getting into the Editor
SDSF
The list of files, and a few Editing features
Taming TSO Version 4
Keys and keylists
Removing Key Captions
2
5
8
11
15
21
22
(Ver #Índice)
131
ANEXO 7- DESCRIPCION FILE STATUS EN ESPAÑOL
Código
Significado
00
No
hay
información
adicional
02 La sentencia READ fue ejecutada satisfactoriamente, pero fue detectada una clave
duplicada.
04 La sentencia READ fue ejecutada satisfactoriamente, pero el largo de registro procesado
no
corresponde
05 Una sentencia OPEN es ejecutada satisfactoriamente, pero el archivo referenciado no es
está presente al momento de ejecutar el OPEN. Si el modo de apertura es I-O o EXTEND, el
archivo
se
creará
10 Una sentencia secuencial READ fue intentada y no existe otro registro lógico en el archivo
porque
ha
sido
encontrado
el
fin
de
archivo.
12
Extensión
IBM.
No
se
encontró
un
registro
de
Subfile
modificado
14 Una sentencia READ secuencial fue intentada para un archivo relativo y el número de
dígitos significativos en el número relativo de registro fue más largo que el tamaño del ítem
de
datos
de
la
clave
relativa
descrita
para
el
archivo
21 Existe un error de secuencia para un archivo indexado accesado secuencialmente. El valor
de la clave de registro ha sido cambiada por el programa entre la ejecución satisfactoria de
una sentencia READ y la ejecución de la siguiente sentencia REWRITE para el archivo, o los
requerimientos de orden ascendente para los valores claves de registro fueron violados.
22 Se intentó escribir un registro que creará una clave duplicada en un archivo relativo; o se
intentó escribir o sebreescribir (WRITE/REWRITE) un registro que creará una clave de
registro principal duplicada en un archivo indexado. CPF4759, CPF5008, CPF5026, CPF5034,
CPF5084,
CPF5085
23 Se intentó hacer un acceso directo (Random) a un registro que no existe en el archivo.
CPF5001, CPF5006, CPF5013, CPF5020, CPF5025
24 Se intentó realizar una escritura más allá de los límites definidos externamente para un
archivo relativo o indexado. Una sentencia secuencial WRITE fue intentada para un archivo
relativo y el número de dígitos significativos en el número relativo de registro era más largo
que el tamaño de la clave de registro relativo descrito para el archivo.
CPF5006, CPF5018, CPF5021, CPF5043, CPF5272
30 No hay información adicional.
CPF4192, CPF5101, CPF102, CPF5129, CPF5030, CPF5143
34 Existe un error permanente porque existe una violación, se intentó escribir más allá de los
límite definidos externamente para un archivo secuencial.
CPF5116, CPF5018, CPF5272, sí la organización es secuencial.
35 Se intentó una sentencia OPEN con la frase INPUT, I-O o EXTEND sobre un archivo no
opcional que no está presente.
CPF4101, CPF4102, CPF4103
37 Se intento una sentencia OPEN sobre un archivo que no soporta el modo de apertura
especificado en la sentencia OPEN. Posibles Violaciones son:
La frase EXTEND o OUTPUT fue especificada pero el archivo no soporta operaciones de
escritura.
La frase I-O fue especificada pero el archivo no soporta las operaciones de entrada y salida
permitidas.
La frase INPUT fue especificada pero el archivo no soporta las operaciones de lectura.
38 Se intentó una sentencia OPEN sobre un archivo cerrado previamente con bloqueo (lock).
39 La sentencia OPEN no fue ejecutada satisfactoriamente debido a un conflicto entre los
atributos del archivo físico y los atributos especificados para ése archivo en el programa.
Comprobar error de nivel para el archivo.
CPF4131
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
41 Se intentó una sentencia OPEN para el archivo en el modo de apertura.
42 Se intentó una sentencia CLOSE para un archivo que no está abierto.
43 Para un archivo secuencial, en el modo acceso secuencial, la última sentencia de entrada
salida ejecutada para el archivo asociado previa a la ejecución de una sentencia REWRITE
¿???.
Para archivos relativos e indexados en el modo de acceso secuencial, la última sentencia de
entrada-salida ejecutada para el archivo. ¿???.
44 Una violación de ¿??, existe porque se intento sobreescribir un registro en el archivo y el
registro no es del mismo tamaño que el registro a reemplazar.
46 Se intentó una sentencia secuencial READ sobre un archivo que está abierto en el modo
I-O sin haber establecido un registro válido debido a que la sentencia start no se ejecutó con
éxito, la sentencia READ precedente fue insatisfactoria o causa una condición AT END.
CPF5001, CPF5025, CPF5183
47 La ejecución de una sentencia READ o START fuen intentada sobre un archivo que no está
abierto en el modo INPUT o I-O.
48 La ejecución de una sentencia WRITE fue intentada sobre un archivo que no está abierto
en el modo I-O, OUTPUT o EXTEND.
49 La ejecución de una sentencia DELETE o REWRITE fue intentada sobre un archivo que no
está abiertoen el modo I-O.
90 Otros errores:
Archivo no encontrado.
Miembro no encontrado.
Falta exepciones I-O.
CPF4101, CPF4102, CPF4103 si un USE es aplicable para el archivo (sobre un no opcional
con OPEN OUTPUT).
Las siguientes excepciones se monitora genéricamente :
CPF4101 al CPF4399
CPF4501 al CPF4699
CPF4701 al CPF4899
CPF4901 al CPF4999
CPF5001 al CPF5099
CPF5101 al CPF5399
CPF5501 al CPF5699
Estas excepciones causan un FILE STATUS = 90. Si un procedimiento USE es aplicable, se
ejecuta. De otra manera, el programa termina y entrega al operador la excepción y la opción
de cancelar, vaciado parcial o vaciado total de variables.
91 Tipo de acceso no definido o no autorizado.
CPF2207, CPF4104, CPF4236, CPF5057, CPF5109, CPF5134, CPF5279
92 Error lógico:
Archivo bloqueado
El archivo ya está abierto
I-O para un archivo cerrado
READ después de fin de archivo
CLOSE para un archivo ya cerrado
CPF4106, CPF4132, CPF4740, CPF5013, CPF5067, CPF5070, CPF5119, CPF5145, CPF5146,
CPF5149, CPF5176, CPF5209
133
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
93 El archivo esta en conflicto con otro usuario.
94 ¿??? y la última operación no fue un READ satisfactorio.
95 Información del archivo inválido o incompleta.
Se especifican claves duplicadas en el programa COBOL. El archivo ha sido abierto
satisfactoriamente pero el archivo indexado de base de datos fue creado con clave única; o
No se especificó clave duplicada en el programa COBOL, y el archivo de base de datos fue
creado permitiendo claves duplicadas.
98 Grave errór interno en la estructura del fichero, generalmente se suelen provocar cuando
hay un corte eléctrico o una salida brusca del programa y algún fichero indexado se ha
quedado abierto, lo que suele ocurrir es problema de correspondencia entre claves y datos,
se recomienda hacerle un RECOBERY (RM/COBOL) o el que corresponda a cada compilador
para rehacer las claves.
En algunos casos , es posible que éste error se deba a un problema físico del disco, en ese
caso también será conveniente copiarlo en otro sitio "físico"
99 Al borrar, leer o reescribir un registro que está siendo bloqueado por otro usuario.
9 A El trabajo a sido cancelado de una manera controlada por comandos CL, CNLJOB,
TRMSBS, TRMCPF, PWRDWNSYS.
CPF4741
Se ha enviado un mensaje de escape durante una operación de entrada READ desde
dispositivo de programa
9 C Falla de adquisición, la sección no ha partido o conectado.
9 D El registro está bloqueado
CPF5027, CPF5032
9 G Excepción de salida para dispositivo o sesión
9 H Operación ACQUIRE fallida. ¿? Apropiado por otro programa o inhabilitado. (9H es el
resultado cuando una operación ACQUIRE causa cualquiera de las excepciones monitoreadas
para 90 o 9N cuando ocurre.
9 I Operación WRITE fallida
CPF4702, CPF4737, CPF5052, CPF5076
9 K Nombre de formato inválido, formato no encontrado
CPF5022, CPF5023, CPF5053, CPF5054, CPF5121, CPF5152, CPF5153, CPF5186, CPF5187
9 M Último registro escrito en Subfile
CPF5003
9 N Error temporal de I-O en hardware (potencialmente recuperable). Error durante la sesión
de comunicaciones.
CPF4145, CPF4146, CPF4193, CPF4229, CPF 4291, CPF4299, CPF4354, CPF4354, CPF4526,
CPF4542, CPF5477, CPF4592, CPF4602, CPF4603, CPF4611, CPF4612, CPF4616, CPF4617,
CPF4622, CPF4623, CPF4624, CPF4624, CPF4625, CPF4628, CPF4629, CPF4630, CPF4631,
CPF4632, CPF4705, CPF5107, CPF5128, CPF5166, CPF5198, CPF5280, CPF5280, CPF5282,
CPF5287, CPF5293, CPF5352, CPF5353, CPF5517, CPF5524, CPF5529, CPF5530, CPF5532,
CPF5533
9 P Open falló porque el archivo no puede ser ubicado bajo control ¿???
CPF4293, CPF4326, CPF4327, CPF4328, CPF4329
134
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
ANEXO 8 -PROGRAMACION UTILIZANDO HOST Y ARQUITECTURA
ISBAN
1. HOST
1.1 MANEJO DEL HOST.
Accedemos haciendo un doble clic en el icono de escritorio Redb1
.
En la ventana que aparece ponemos TSOD NOMBRE_DE_USUARIO y pulsamos
CONTROL.
Aparece la siguiente ventana. En ella, donde pone PASSWORD ponemos nuestra
contraseña y pulsamos CONTROL.
135
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Nos aparece la primera ventana del HOST informativa de que hemos accedido.
Pulsamos Control y nos aparece la segunda ventana informativa de que tenemos acceso
al CISC.
136
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Pulsamos CONTROL de nuevo y aparece el menú inicial.
137
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
En el vamos a poner la opción 2 y pulsamos CONTROL para entrar en el menú general
de desarrollo, que es el que vamos a usar siempre.
1.2 TECLAS DE FUNCION PARA USAR EL HOST.
Las teclas de función que más se utilizan en los menús del HOST son las siguientes:
F2 F3 F7 F8 F9 Abrir una nueva ventana del HOST.
Volver al menú anterior.
Visualizar el contenido de la pagina anterior.
Visualizar el contenido de la pagina siguiente.
Con esta tecla de función pasamos de una ventana abierta a otra. Aparece una
ventana al pulsar esta tecla que permite abrir una nueva ventana colocando el
cursor delante de start a new screen y pulsando CONTROL, o pasar de una
ventana abierta a otra poniendo el cursor a la izquierda en la línea de la ventana
que queremos visualizar y pulsando CONTROL. Notar que un * delante de una
línea de ventana activa indica que esa es la ventana que actualmente estamos
visualizando.
(( PONER AQUI VENTANA F9)))
F10
Ver el contenido de la izquierda de la ventana.
F11
Ver el contenido de la derecha de la ventana.
1.3 COMANDOS PARA USAR EL HOST.
En la línea de comandos podemos poner:
138
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
KEYS Muestra las asignaciones de las teclas de función para la ventana
activa.
SWAP LIST Muestra la ventana de listado de ventanas abiertas. Normalmente hace
lo mismo que F9.
SCRNAME nombre-ventana Pone el nombre-ventana a la ventana actual y se
mostrará ese nombre en el listado de ventanas abiertas al pulsar F9.
START Abre una nueva ventana directamente sin necesidad de acceder a
través de F9 al listado de ventanas.
1.4 SALIR DE TSOD.
Para salir de TSOD, pulsamos F3 hasta llegar al menú general de desarrollo y pulsamos
como opción la X y CONTROL. Debemos cerrar todas las ventanas de sesión que
hayamos abierto.
(((En caso de que en alguna de ellas nos lleve hasta otro menú (ver imagen siguiente), al
pulsar la X, indicaremos en esa ventana la opción 2 y pulsaremos CONTROL))).
1.5 MENÚ DE EDICIÓN.
139
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
A través del menú de edición podemos crear o editar un archivo para programar el
código COBOL en él. Accedemos a través de la opción 2 desde el menú general de
desarrollo.
En la ventana que aparece, el panel de entrada del editor indicaremos la librería en la
que vamos a trabajar. Una librería es la dirección donde se van a almacenar los archivos
y se compone de distintos campos seguidos por un ‘.’ .
Si vamos a trabajar por ejemplo en la librería DES.ISWF.TRABAJO.INS.FTE,
pondremos:
En Proyect:
En Group:
En Type:
En Member:
DES.ISWF
TRABAJO
INS.FTE
Nombre_del_archivo
En Member pondremos el nombre del archivo donde vamos a escribir, si el archivo
existe lo abrirá y si no existe lo creará y lo abrirá vacío.
Pulsamos CONTROL.
140
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
NOTA: En el caso de que el nombre de la librería sea demasiado largo y no podamos
ponerlo en proyect, group y type al editar, podemos borrar lo que contengan esas
cuatro líneas y ponerlo en la línea de data set name con el nombre del documento
entre paréntesis. Para editar el programa del ejemplo se pondrá en esa línea:
DES.ISWF.TRABAJO.INS.FTE(NOMBRE_DEL_ARCHIVO)
Ahora tenemos abierto el editor.
141
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Línea
Numeración
de
de
Teclas
de
Vamos a ver como podemos utilizarlo. Existen tres formas de dar instrucciones al
editor:
La numeración de las líneas.
Las opciones de escritura del texto vamos a indicarlas a través de la inserción de una
serie de caracteres y números en la posición que queramos del editor dentro de la
numeración de líneas. Así, si en esa columna, en una fila determinada ponemos por
ejemplo una I, se insertará una línea debajo de esa fila donde podremos continuar
escribiendo. Las opciones más habituales son:
I In R Rn
D Dn
C M
A Inserta una línea debajo de la línea donde hemos puesto la I.
Inserta n líneas a continuación de esta, siendo n el número de líneas.
Repite el contenido de esta línea en la línea de debajo.
Repite n veces esta línea debajo, siendo n el número de líneas.
Borra una línea.
Borra n líneas, siendo n el número de líneas.
Copia esta línea en el portapapeles.
Mover esta línea. La corta y la guarda en el portapapeles.
Escribe la línea o el bloque de líneas que hayamos copiado o movido debajo de
ésta.
B Escribe la línea o el bloque de líneas que hayamos copiado o movido encima de
ésta.
)) Mueve un espacio hacia la derecha el texto de esta línea.
))n
Mueve n espacios hacia la derecha el texto de esta línea.
142
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
(( Mueve un espacio hacia la izquierda el texto de esta línea.
((n
Mueve n espacios hacia la izquierda el texto de esta línea.
Para bloques de texto se coloca dos caracteres indicativos de lo que queremos hacer en
la primera línea del bloque y esos mismos caracteres en la última línea del bloque de
texto.
Por ejemplo:
• Borrar en bloque: Ponemos DD en la primera línea y DD en la última línea del
bloque y al pulsar CONTROL se eliminará todo el contenido que haya entre ambas
líneas.
• Copiar en bloque: Ponemos CC en la primera línea del bloque y CC en la última.
Escribimos una A (after) o una B (befote) en la posición donde queremos copiar el
bloque de texto dependiendo si queremos que se copie a continuación de esa línea o
antes de la misma y pulsamos CONTROL.
• Mover en bloque: Se hace igual que copiar en bloque, pero en lugar de poner CC
pondremos MM en la primera y la última línea del bloque.
• Desplazar a la izquierda o derecha un bloque de texto: Se pone ))n en la primera
línea del bloque y ))n en la última línea del bloque y al pulsar CONTROL desplaza
todo el texto del bloque n espacios a la izquierda. ( Si en lugar de poner ))n, se pone
((n, desplazará a la derecha).
En la parte inferior de la pantalla del editor aparece la posición del cursor (el número de
fila y el número de columna en la que se encuentra), pero esta posición no es la posición
COBOL, por lo que debemos conocer la posición COBOL para no tener errores de
sintaxis a la hora de realizar la compilación.
Por ejemplo:
• Los 01 van en la posición COBOL 8.
• Los 05 en la posición cobol 12, igual que los niveles 88.
• Los 10 van en la posición cobol 16.
• Los 03 van en la posición cobol de los 05 desplazando todo a la posición del
siguiente (el 05 pasaría a la posición del 10, ...)
• Los comentarios (*) comienzan en la posición cobol 7.
• Los exec comienzan en la posicion COBOL 12.
Para poder visualizar la posición COBOL, el editor nos muestra la regla para COBOL si
ponemos COLS en la numeración de una línea.
143
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
La línea de mandatos.
En la línea de mandatos vamos a indicar las operaciones que queremos realizar con este
fichero o entre varios ficheros. Las que más utilizamos son:
SAVE Guardar el contenido del documento.
F texto
Buscar un texto en el documento. Utilizando la tecla de función F5
continuará buscando el mismo texto a través del documento.
CUT Copia al portapapeles un texto seleccionado mediante cc a través de la
numeración de líneas para poder llevarlo posteriormente a otro documento.
PASTE
Pega un texto copiado mediante CUT en la posición de la línea indicada
mediante una A o una B en la numeración de línea.
L número_de_línea Posiciona el cursor en la línea del documento indicada por
número de línea.
CREATE
Sale de la ventana de edición y muestra la ventana de librerías para indicar
la librería y el nombre de programa con el que queremos crear el nuevo. El
fichero nuevo se creara con todos las líneas indicadas mediante Cn en la
numeración de línea y desde la posición en la que hayamos puesto la Cn.
RES
Quita los avisos que aparecen en las líneas superiores en el editor.
HI COL
Pone el editor en el modo de colores para que muestre las palabras
reservadas, comentarios, cadenas de caracteres, errores, ... en distintos
colores.
M (F8)
Si escribimos una M en la línea de comandos y pulsamos la tecla de función
F8, el cursor se mueve hasta la última línea escrita que exista en el
documento.
M(F7)
Si escribimos una M en la línea de comandos y pulsamos la tecla de función
F7, el cursor se mueve hasta la primera línea escrita que contenga el
documento.
NUM STD ON COBOL-> Con este comando estandarizamos la ventana de edición de
código para COBOL, eliminando las primeras 6 columnas que están a
continuación de la columna de numeración. Si ahora ponemos COLS, la
numeración de COLS sería la misma que las posiciones indicadas por el
cursor en la parte inferior izquierda de la pantalla. Esta opción no es
recomendable cuando tengamos escrito texto a continuación de la
numeración de pantalla ya que eliminará todo el trozo de texto que esté en
las 6 primeras columnas.
CANCEL Sale del editor sin guardar los cambios.
DOS EJEMPLOS:
1. Copiar de un fichero a otro existente.
a) Abrimos dos ventanas del editor, una con el documento desde el que queremos
copiar y otra con el documento destino.
b) Ponemos CC en la primera línea que queremos copiar y CC en la última línea
del bloque a copiar.
c) En la línea de comandos ponemos CUT.
d) Nos vamos al documento destino y en la línea anterior a la posición donde
queremos poner el bloque de texto escribimos una A.
e) Ponemos en la línea de comando PASTE.
144
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
2. Crear un documento con la misma información de otro.
a) Abrimos una ventana del editor con el documento desde el que queremos copiar.
b) En la primera línea del documento ponemos C9999.
c) En la línea de comandos ponemos CREATE.
d) Sale de la ventana del editor y aparece una ventana de guardado en la que
indicamos la información de la librería y el nombre del nuevo documento.
NOTA: Si en lugar de utilizar C9999, utilizamos M9999 movemos el contenido del
fuente al destino dejando el documento fuente vacío.
Las teclas de Función.
Las que más se utilizan:
F3
Salir del editor. Guarda el documento cuando sale.
F5
Si se ha indicado en la línea de comando F texto_a_buscar, permite seguir
buscando el texto a través del documento.
F7
Muestra la pantalla siguiente de contenido del documento.
F8
Muestra la pantalla anterior de contenido del documento.
F9
Abre el menú que permite pasar de una abierta a otra o abrir una nueva ventana.
F10
Muestra el texto de la parte derecha de la pantalla.
F11
Muestra el texto de la parte izquierda de la pantalla si lo hay.
NOTA: Siempre que pongamos una orden en una línea o un comando debemos pulsar
control para que se ejecute o borrarla si queremos cancelarla.
145
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
1.6 MENÚ DE MANEJO DE LIBRERIAS.
A través de la opción 3 desde el Menú general de desarrollo entramos en el menú de
selección de utilidades.
Si ponemos la opción 4 entramos en la ventana de especificación de fichero.
146
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
A través de ella podemos acceder a las distintas librerías y archivos, permitiéndonos
abrir los documentos en modo de edición y visualización o realizar copias de archivos
desde una librería a otra sin necesidad de abrirlos.
Para ello indicamos la librería principal y a través de ella podremos ir entrando en las
que contiene. Por ejemplo, si queremos entrar a ver los documentos que contiene la
librería DES.ISWF.TRABAJO.SWF.FTE, podemos poner lo siguiente:
En Cualificador 1: DES
En Cualificador 2: ISWF
En Resto: TRABAJO.INS.FTE
147
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Pulsamos CONTROL y en la ventana que aparece (DATA SET LIST UTILITY)
volvemos a pulsar CONTROL.
148
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Nos muestra la librería DES.ISWF.TRABAJO.INS cerrada. Para poder ver su contenido
vamos a poner una V delante del nombre de la librería (en la columna de COMMAND)
y pulsamos CONTROL.
Se abre la librería y nos muestra un listado de los archivos que contiene.
En el caso de que queramos editar alguno de ellos, pondremos una E delante de la línea
donde aparece el nombre del documento y pulsaremos CONTROL. Si queremos
solamente visualizarlo sin permiso para realizar modificaciones, entonces en lugar de
una E pondremos una V. En ambos casos, se abrirá la ventana del editor mostrándonos
el contenido del documento.
Copiar un archivo.
Si lo que queremos es copiarlo a otra librería, entonces pondremos una C delante y
pulsaremos CONTROL.
149
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Nos mostrará una nueva ventana, el panel de entrada de copia, en el que en
CURRENT FROM DATA SET aparece la librería y el programa fuente que queremos
copiar y a continuación nos aparecen tres líneas en las que vamos a especificar la
librería destino:
Por ej. supongamos que la librería destino es DES.ISWF.TRABAJO.SWF.FTE.
En la sección TO LIBRARY pondremos:
En Proyect: DES.ISWF
En Group: TRABAJO
En Type: SWF.FTE
Si el fichero ya existe en esa librería nos dará un error, por lo que si queremos copiarlo
y ya existe en Replace Option debemos poner una / indicando que remplace el
miembro con el mismo nombre. Si no existe no es necesaria la /.
Una vez indicada la librería de forma correcta, pulsamos CONTROL y de esta forma se
ha copiado el archivo. Salimos con F3 al menú inicial de desarrollo y desde ahí
podemos comprobar entrando de nuevo a través del menú de selección de utilidades si
existe el nuevo archivo en la librería donde lo hemos copiado.
150
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Renombrar un archivo.
Si queremos renombrar el archivo, escribiremos una R y pulsaremos CONTROL.
Aparecerá una ventana en la que mostrará el nombre actual y en la siguiente línea nos
permitirá escribir el nombre nuevo.
(((PONER PANTALLA DE RENOMBRAR AQUÍ)))
Eliminar un archivo.
Si lo que queremos es eliminar definitivamente un archivo (¡Cuidado con esto!)
entonces lo que haremos será poner una D delante y pulsar CONTROL. Nos aparece
una ventana en la que se nos indica el archivo que vamos a eliminar y si pulsamos
CONTROL se eliminará el archivo. Con F3 cancelamos la eliminación.
(((PONER PANTALLA DE ELIMINAR FICHERO)))
1.7 MENÚ DE BÚSQUEDA DE CADENAS DE CARACTERES EN LIBRERIAS.
151
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
A través de la opción 3 desde el Menú general de desarrollo entramos en el menú de
selección de utilidades.
Si ponemos la opción 14 entramos en la Ventana de utilidades de búsquedas.
152
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
A través de ella podemos buscar cadenas de caracteres dentro de los ficheros existentes
en una librería. Para ello, en la línea de SEARCH STRING pondremos la cadena de
caracteres a buscar entre comillas simples. En ISPF LIBRARI indicaremos la librería
donde queremos buscar. Podemos indicar una librería que contenga a otras para
encontrar así más archivos.
Por ejemplo, vamos a buscar la cadena BPBF en la librería
DES.ISWF.TRABAJO.SWF.FTE.
Para ello escribimos:
En Search String: 'BPBF'
Y dentro de ISPF Librari:
En Proyect: DES.ISWF
En Group: TRABAJO
En Type: SWF.FTE
Si hay algo escrito en la línea de Data Set Name, lo borramos y Pulsamos CONTROL.
153
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Esperamos un poco de tiempo. Aparecerá un listado con el/los nombre/s de los fichero/s
donde aparece la cadena y mostrará el párrafo en el que ha encontrado esa cadena
dentro del documento.
1.8 VISUALIZAR LAS COPYS Y RUTINAS.
Las COPYS y las RUTINAS (y algunos programas) existentes en la arquitectura las
podemos visualizar en el editor. Para ello, en la línea de comandos del menú general
de desarrollo ponemos:
TSO LIBRARI
y pulsamos CONTROL.
154
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Aparece una ventana llamada Consulta Módulos de Librarian en la que podemos
indicar en PROGRAMA/COPY una C (si es una COPY) o una P (si es una RUTINA o
programa), y en NOMBRE MÓDULO el nombre de la COPY o RUTINA (o el
programa). Pulsamos CONTROL.
155
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
En la ventana informativa que aparece podemos ver si ha encontrado el archivo que
buscamos. Pulsamos de nuevo CONTROL.
Si encuentra la COPY, la RUTINA o el programa se abre el editor mostrando el
contenido del documento solicitado.
Si no lo ha encontrado vuelve al menú general de desarrollo.
1.9 VISUALIZAR LA COLA DE FICHEROS DE COMPILACIÓN.
Cuando compilamos un programa o hacemos un bind desde la Arquitectura ISBAN, la
información sobre la terminación correcta o no y los archivos de compilación y bind se
muestran en la cola del spool. Esta cola se visualiza desde el ISPF, por lo que tenemos
que verla a través de TSOD. Para visualizar la cola, desde el menú general de desarrollo
accedemos al submenú SDSF poniendo una S en la línea de opciones y pulsando
CONTROL.
156
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Entramos así en el menú de opciones primarias de SDSF.
Ponemos una H y pulsamos CONTROL.
Entramos en la ventana que muestra las salidas mantenidas de SDSF, es decir la cola
del spool.
157
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Para poder visualizar la cola del spool referente a nuestra compilación o bind, si no la
vemos aún, debemos indicar lo siguiente en la línea de comandos:
owner * (CONTROL)
pre nombre_usuario*
Si el usuario que hemos utilizado para compilar o hacer bind es distinto al usuario que
hemos utilizado para abrir la sesión de TSOD, entonces debemos de poner en
nombre_usuario* el usuario de compilación o de bind.
Normalmente, las compilaciones tienen como nombre en la cola el del usuario con una
C al final y los bind tiene como nombre el del usuario con una A al final.
Con M(F8) vamos a ir al final de la cola, ya que si acabamos de compilar normalmente
nuestra compilación estará al final de la cola. Si otra persona ha compilado con el
mismo usuario, su compilación también estará en esta cola, por lo que debemos
comprobar que la los archivos de compilación que estamos viendo sean los nuestra.
Además, si hemos realizado más de una compilación debemos ver también la hora de la
compilación para comprobar que sea la última realizada.
Para hacer todas estas cosas, en la línea de la compilación que creemos es la nuestra
debemos:
-> Fijarnos en el número que aparece detrás del nombre de la compilación. Si aparece
un valor 12 o un valor 8 detrás del nombre de la compilación indica error. Si aparece un
4 o un 24 indica errores warning y si aparece un 0 es que no hay ningún error. Estos son
los valores más usuales que aparecen, pero hay más. Para ver si es nuestra compilación
y la hora:
• Delante del nombre de la compilación que queremos ver ponemos:
o SJ para que nos muestre el documento con el nombre del programa al
principio.
o Salimos con F3 y en esa misma línea ponemos S para que nos muestre la
hora de compilación.
Si es nuestra compilación y queremos ver los posibles errores que tengamos escribimos
una ? delante de la línea donde aparece el nombre de la compilación y pulsamos
CONTROL.
Ahora nos muestra los archivos de nuestra compilación. En el último documento de la
lista que tenga terminación -out pondremos una S para que lo abra, escribiremos en la
línea de comandos M y pulsaremos F8 para que vaya al final del documento. Veremos
en el final del documento los errores de compilación que existan. Para modificar el
código del programa y solucionar los errores encontrados en la compilación abriremos
con F9 otra nueva ventana en la que tendremos el programa editado y cuando hayamos
quitado todos los errores posibles, volveremos a compilar saliendo antes del editor. Si
en el documento de errores de compilación, delante de la descripción del error nos
aparece una:
S
Indica que el error es severe.
E
Indica error.
Estos dos tipos primeros hay que solucionarlos completamente porque sino no funciona
el programa.
W
Indica que es un warning.
I Indica que es un informativo.
158
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Si nos da errores de este tipo, el programa puede funcionar correctamente. Tratar de
quitarlos si se puede y sino dejarlos. Si ya ha compilado, ahora debemos preparar todo
lo necesario para ejecutar el programa y ver si funciona. Normalmente lo ejecutaremos
a través del debugger, pero también se puede ejecutar mediante un JCL. Ver apartados
1.12 y anexo.
1.10 CREACION Y ALLOCATE DE FICHEROS.
(((HAY QUE EXPLICAR MEJOR ESTE APARTADO Y PONER
PANTALLAS)))
Para crear un fichero, podemos hacerlo de varias maneras, entre otras:
1. Utilizando un fichero de entrada existente:
• Entramos a través de la opción 3.2 desde el menú general de desarrollo.
• Escribimos entre comillas simples en Data Set Name el nombre del fichero de
entrada existente (ej. 'DES.JM.LR.BDK.ENTRADA1')
• Si pulsamos CONTROL nos informa sobre las características del fichero.
(Volvemos a la pantalla anterior si hemos pulsado CONTROL).
• Escribimos en la línea de comandos una A (de allocate) y nos pedirá que le
indiquemos el nombre nuevo del fichero.
• Indicaremos el tamaño de nuestro registro (normalmente el tamaño de la copy) y
pulsamos control.
• Si queremos cambiarle el nombre, desde la pantalla donde hemos indicado A,
ahora indicamos R (teniendo en Data Set Name el nombre del fichero al que
queremos cambiárselo) y nos aparece una nueva pantalla en la que podemos
escribir el nombre nuevo, siempre indicando la librería y el nombre).
2. Utilizar alguno de los ficheros JCL existente:
Hay un fichero llamado Allocate en la librería DES.DESILEH.FTE de creación de
ficheros. Modificar en el documento JCL el nombre del fichero (y si es necesario la
librería) y el tamaño del registro que utiliza el fichero en LRECL que queremos crear.
Para que cree nuestro fichero de entrada en la línea de comandos poner SUB.
Seguir estos pasos para cada uno de los ficheros de entrada que tengamos y al finalizar
ponemos CANCEL en la línea de comandos y pulsamos CONTROL para salir sin
modificar el archivo JCL.
1.11 ENTRADA DE REGISTROS EN FICHEROS CON DX
Para poder almacenar información en los ficheros de entrada que hemos creado, vamos
a editar primero el fichero de entrada que acabamos de crear (y por tanto estará vacío) y
añadirle una línea en blanco. Lo salvamos y salimos del editor.
En la librería de trabajo propia (DES.DESRLB.FTE) creamos o guardamos las COPYS
de cada uno de los fichero de entrada que tenemos, ya que para poder utilizar el
programa de inserción de datos en ficheros, DX, necesitamos las COPYS de todos los
ficheros a los que vamos a añadir registro.
159
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Vamos al menú general de desarrollo y escribimos la opción DX en la línea de
comandos y pulsamos control.
Se abre el programa DX. Pulsamos control en todas las pantallas informativas que nos
van saliendo hasta la pantalla de menú. Seleccionamos la opción 2 y aparece una
ventana en la que vamos a rellenar los campos de información sobre el fichero al que
vamos a añadir registros. En los campos que aparecen escribimos:
• En EDIT MODE ponemos F.
• En EDIT DATASET ponemos el nombre completo del fichero de entrada
donde vamos a escribir los registros.
• En CREATE AUDIT TRAIL ponemos N.
• En COBOL LAYOUT USAGE ponemos S.
• En COBOL LAYOUT DATASET ponemos la librería donde hemos guardado
la COPY.
• En MEMBER COPY ponemos el nombre de la COPY.
• En SELECTION CRITERIA USAGE ponemos N.
Pulsamos CONTROL y nos aparece la ventana de introducción del registro con todos
los campos de la COPY a la izquierda, el tipo de datos (C-alfanumérico, PS-comp3 y Pnumérico???) y a la derecha la zona donde podemos introducir los valores para cada
campo. Introducimos los valores en los campos necesarios y escribimos en la línea de
comando SAVE para que nos lo guarde. Para ver el resto de campos que pueda haber en
la siguiente pantalla, debemos poner en SCROLL la instrucción CSR y CONTROL y
luego pulsar F8.
Si queremos introducir un nuevo registro, en comandos escribimos CHAR y nos
muestra la ventana de edición de fichero. En esta ventana se ve cada registro como una
fila del fichero. Para insertar una nueva fila nos colocamos encima de la numeración de
la última línea, escribimos una I y pulsamos CONTROL. Si queremos eliminar una fila
del fichero, haremos lo mismo, pero en lugar de una I, pondremos una D. Igual haremos
si queremos repetir una fila, pero pondremos una R. Para seleccionar un registro y
poder rellenar sus campos, en la fila del registro ponemos una S en la zona numerada de
la izquierda. Al pulsar control vuelve a la pantalla de introducción de datos y en este
caso introduciremos datos para el nuevo registro que hemos seleccionado. Cada vez que
queramos escribir o modificar un registro lo haremos a través de la selección con S del
registro en la ventana de CHAR.
La ventana de introducción de registro se llama FMT, y poniendo FMT en comando
cuando estamos en CHAR, nos vuelve a mostrar la ventana de introducción de registro
sin necesidad de seleccionar ninguno, con el que ya teníamos seleccionado. Hay otra
opción de visualización de ficheros, la opción que muestra el fichero en Hexadecimal.
Para poder visualizar el fichero de esta forma, escribiremos en la línea de comandos la
instrucción HEX y pulsaremos CONTROL.
Una vez salvados todos los registros salimos del programa pulsando varias veces F3.
1.12 EL DEBUG.
Dependiendo del programa que tengamos que ejecutar vamos a utilizar 3 tipos de
debug. El Debug de programas Batch, el Debug de programas Batch con DB2 y el
Debug de programas On-line.
160
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
1.12.1 El Debug de programas Batch. El debug IB.
Si nuestro programa es un programa Batch y no utiliza DB2 (utilice o no ficheros)
vamos a utilizar el programa IB para ejecutarlo o hacerle trazas.
Si el programa utiliza ficheros, entonces además debemos de ALLOCAR los ficheros
antes de ejecutar el programa. Para entrar en IB, desde el menú general de desarrollo
escribimos en la línea de comandos IB y pulsamos CONTROL.
A. ALLOCATE DE FICHEROS CON IB.
Para allocar los ficheros que utiliza el programa debemos haber creado previamente un
JCL de asociación de los ficheros que utilizamos en nuestro programa con el espacio
físico de los ficheros. Ver anexo.
Entramos en la opción 3 del IB (ALLOCATION) y después en la opción 2 (JCL) y
en la ventana que aparece ponemos la librería donde esta el JCL de los ficheros y el
nombre del JCL. Pulsamos CONTROL.
Aparece una línea con el nombre del JCL de ficheros. Delante de la línea ponemos
una S y pulsamos CONTROL.
((DUDAS!!! ESTO ES ASÍ O HAY QUE SELECCIONAR ALGO)))
Nos muestra una nueva pantalla con el final del JCL, pulsamos F3.
Ahora aparece vemos el JCL completo y en la parte superior de la pantalla una línea
de comandos. En esa línea:
• Ponemos FREE y pulsamos control. Comprobamos que en la parte superior
derecha de la pantalla pone freed.
• Ponemos ALLOC y pulsamos CONTROL. Comprobamos que en la parte
derecha de la pantalla pone SUCESSFULLY COMPLETED (hay veces que
pone RESERVED, si pone esto no escribirá en el fichero de salida por lo que
debemos salirnos y volver a intentarlo de nuevo borrando antes el/los fichero/s
de salida de la librería donde se han creado).
• Salimos del programa hasta el menú inicial de IB.
B. ACCEDER AL MENÚ DEBUG IB DE COBOL.
• En el menú principal de IB ponemos ahora la opción 1 (Cobol Test) y pulsamos
CONTROL.
• En la ventana que aparece (panel de control de ejecucion BATCH) Nos pide que
indiquemos el nombre del programa y el nombre de las librería que utilizamos
en el programa. Estas librerías van a depender del tipo de programa que usemos.
Si no llama a rutinas tendrá una librería llamada DES.GRXX.PGM con XX las
dos primeras iniciales de nuestro programa. Si usamos rutinas también tendrá
que existir una librería con las dos primeras iniciales de cada rutina. Pulsamos
CONTROL.
• En la pantalla que aparece (panel de control de monitor BATCH) , aparecen una
serie de campos donde vamos a escribir el nombre de nuestro programa y el
nombre de todas las rutinas que usamos en el. Pulsamos CONTROL.
• En esta ventana ya estamos en el debugger. Aparece el inicio de nuestro
programa y podremos ir haciendo trazas, modificando los valores de las
variables, visualizando los valores de los campos y realizar una ejecución
completa. Antes de utilizarlo, miramos la teclas de función que tenemos
161
Software Factory
Cáceres –
•
•
Rafael Campillo Lorenzo.
asignadas para el Debugger poniendo en la línea de comandos la opción KEYS
y pulsando CONTROL. Vemos que teclas de función se utilizan para:
STEP-> Sirve para ejecutar línea a línea el programa.
GO-> Sirve para ejecutar completamente el programa, de principio a fin.
LEFT-> Permite ver el contenido de la parte izquierda de la pantalla.
RIGHT-> Permite mirar el contenido de la parte derecha de la pantalla.
Comenzamos haciendo una traza. La línea que se va a ejecutar a continuación
aparece en blanco. A medida que vamos pasando de línea, en la parte central de
la pantalla aparecen los valores de las variables que vamos utilizando. Si antes
de ejecutar la línea cambiamos el valor actual de la variable por otro y pulsamos
control, se ejecutará la línea con el nuevo valor que le hayamos dado.
Siempre podremos visualizar los valores de las variables que queramos, si no
aparecen en la parte superior de la ventana con:
o En la línea de comando ponemos K nombre-variable y nos aparece en la
parte superior de la ventana su valor.
o Si no vemos el valor, o es un campo de grupo de variables, podemos
visualizar su contenido en una nueva ventana y modificarlo allí
poniendo:
DIS nombre-variable. Pulsamos CONTROL y nos muestra la variable
en la nueva ventana. Modificamos su valor si es necesario y pulsamos
CONTROL para cada modificación. Volvemos a la ventana del
debugger con F3.
Si tenemos ficheros y queremos ver como su estado, podemos hacerlo
desde la línea de comandos de la ventana del debugger poniendo
FILES y pulsando CONTROL. Si se había hecho el allocate
correctamente, en esta ventana veremos que la dirección física que
aparece para cada fichero es donde realmente lo hemos creado. El
fichero de salida tendrá una dirección física temporal y después se
copiará a la dirección física que le hayamos indicado en el JCL de
ficheros. También nos indicará si el fichero esta abierto o no y su file
status.
o Cuando queramos ejecutar completamente el programa podemos hacerlo
mediante la tecla de función definida para go o escribiendo go en la línea
de comandos del debugger. Pero también podemos poner breakpoints
para hacer llegar la ejecución hasta una línea determinada. Para poder
poner breakpoints debemos escribir en la línea de comandos: AT numlinea. En la línea indicada por num-linea aparecerá en la parte izquierda
una U y cuando hagamos un GO llegará a esa posición y se detendrá.
1.12.2 El debug de programas Batch con DB2. El debug IBD.
El debug IBD se maneja igual que el IB, pero tiene una opcion para indicar la base de
datos que se va a utilizar y el plan del programa, ya que para todo programa que trabaje
con DB2 debemos haber creado su plan y haber hecho un bind del programa y del plan.
Si ademas el programa utiliza ficheros, debemos de hacer un allocate a través de la
opción 3 del menú principal del IBD tal y como se hacia con IB.
Para entrar en IBD ponemos en el menú general de desarrollo IBD y pulsamos
CONTROL.
En la ventana que nos aparece escribimos:
162
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
-> En db2 System Name ponemos el nombre de la base de datos con la que trabaja el
programa (la que usamos nosotros es DBD1).
-> En Plan Name escribimos el nombre del plan de nuestro programa que será el
nombre del programa con una D al final.
-> En Library Name ponemos la librería de desarrollo con base de datos que es:
DES.GRDE.DBRM
Pulsamos CONTROL.
Aparece una ventana con el menú de IBD. Si utilizamos ficheros, antes de entrar en el
debugger tenemos que hacer un allocate de los ficheros a través del
JCL de ficheros, por lo que entraríamos en la opción 3 y seguiriamos los mismos pasos
que explicamos para IB.
Si no tenemos ficheros, o ya hemos hecho el allocate, seleccionaremos la opcion 1
(COBOL Test) y pulsaremos CONTROL.
Aparece una nueva ventana en la que tenemos que rellenar los siguientes campos:
-> En PGM escribiremos el nombre de nuestro programa.
-> En Task Libraries escribiremos todas las librerias que necesitemos para ejecutar el
programa. Estas librerías van a depender del tipo de programa que
usemos. Si no llama a rutinas tendrá una librería llamada DES.GRXX.PGM con XX
las dos primeras iniciales de nuestro programa. Si usamos rutinas
tambien tendrá que existir una librería con las dos primeras iniciales de cada rutina.
Pulsamos CONTROL.
Nos aparece una nueva ventana, el panel de control de monitor batch. En esta ventana,
en la zona de programas monitorizados pondremos el nombre de nuestro programa y de
todas las rutinas a las que llama el programa. Pulsamos CONTROL y aparece la
ventana del debugger. El manejo del debugger de IBD es igual al de IB explicado en el
apartado anterior.
1.13 HACER UN TRANSFER.
Con transfer podemos pasar documentos de texto escritos en el editor de MS-DOS al
HOST y viceversa. Para ello entramos en el Host desde el Menú general de desarrollo
poniendo en la linea de comandos 6 y pulsando CONTROL.
En la ventana del Host, en la parte superior hacemos un clic con el ratón en el botón
Recibir Archivo (si nos fijamos en el icono del botón se ven una serie de folios saliendo
de una pantalla en negro hacia un documento en blanco). En la ventana emergente que
aparece ponemos en archivo del sistema principal, entre comillas simples, la librería y
entre paréntesis el nombre del fichero que queremos copiar desde el host (si es un
fichero de los de entrada o salida de un programa, no se pone entre paréntesis). En
archivo pc ponemos el nombre del archivo que le vamos a dar en windows con
extension txt. En tipo de transferencia, si es un archivo corto ponemos txt y si es un
archivo extenso ponemos append. Seleccionamos la carpeta de windows donde
queremos guardarlo y pulsamos en el botón recibir.
((ENVIAR CON TRANSFER???)))
163
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
2. MANEJO DE LA ARQUITECTURA ISBAN.
Una vez escrito el programa en el editor del host, para poder compilarlo en la
arquitectura ISBAN, debemos antes darle de alta y crear su plan.
2.1
ACCESO A ISBAN.
Accedemos haciendo un doble clic en el icono del escritorio Redb1.
En la ventana que aparece ponemos DEST y pulsamos CONTROL.
En la pantalla que aparece pondremos nuestro usuario de compilación y la contraseña y
pulsamos CONTROL.
De esta forma, accedemos al menú inicial de la arquitectura ISBAN.
Desde el menú inicial, tecleamos la opcion AR y pulsamos CONTROL, accediendo así
al menú de la arquitectura. Desde este menú es desde donde vamos a dar de alta al
programa, dar de alta al plan del programa y compilar.
2.2.
MENÚ DE DISEÑO DE OBJETOS DE ARQUITECTURA
Desde el menú de la arquitectura accedemos a la opción 3, diseño de objetos
arquitectura tecleando 3 y pulsando CONTROL.
Desde el menú de Diseño de objetos vamos a poder acceder a las opciones para dar de
alta al programa y a su plan, además del manejo de transacciones y sus mapas.
2.2.1 Dar de alta al programa en ISBAN.
Para dar de alta al programa accedemos a la opción programas poniendo como opción la
número 6 y pulsando CONTROL.
Escribimos los datos necesarios para dar de alta al programa:
•
ENTORNO: Pondremos como entorno DE.
•
MÓDULO: El módulo es el nombre de nuestro programa.
•
SUBAPLICACIÓN: Un código que nos deben de dar y que indica la
subaplicación en la que se va a utilizar nuestro programa.
•
INDICE VIGENCIA: Pondremos como índice vigencia la letra V.
•
CÓDIGO TÉCNICO: Las dos primeras letras de nuestro programa.
Después de asegurarnos que todos los campos han sido rellenados correctamente,
pulsamos F6 para dar de alta.
164
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
En la pantalla que aparece terminamos de rellenar los datos necesarios para dar de alta
al programa:
•
ENTORNO, COD.TÉCNICO Y PROGRAMA: Tendrán los valores de la
pantalla anterior. Si no fuese así pondríamos lo mismo que en la pantalla anterior
(entorno: de, Cod. Técnico las dos primeras letras de nuestro programa y programa:
nombre de nuestro programa).
•
RESPONSABLE: Si no se nos indica nada, pondremos las dos primeras
letras del programa.
•
SUBAPLICACIÓN: El código que nos hayan indicado para este
programa.
•
LENGUAJE: Este campo indica el tipo de lenguaje en el que hemos
programado el programa. Si en este campo ponemos una ? y pulsamos CONTROL,
aparecerá una ventana informativa sobre los códigos de lenguaje que se pueden poner.
Nos lo indicará la tercera letra del nombre de nuestro programa. Por ejemplo, si la
tercera letra del nombre del programa es una B, indica que el programa utiliza el
lenguaje COBOL con DB2 y la letra que tenemos que poner en este apartado es una B.
•
TIPO DE EJECUCIÓN: El tipo de ejecución de nuestro programa. Puede
ser B (Batch), O (On-line) o M (Mixta, Batch y On-line).
•
DESCRIPCION: Texto de más de tres palabras que resume qué hace el
programa.
•
FUNCIONALIDAD: Ponemos como funcionalidad AP.
•
El resto de campos se dejan como están.
Para confirmar el alta del programa, pulsamos la tecla de función F5. Si no ha habido
ningún problema, en la parte inferior de la pantalla nos indicará que el alta se ha
realizado correctamente.
2.2.2 Dar de alta al plan en ISBAN.
Los programas que utilizan DB2 necesitan un plan. En otras arquitecturas el plan
es único para todos los programas, pero en ISBAN no, por lo que
vamos a crear un plan para cada uno de los programas que demos de alta en la
arquitectura y que usen DB2.
Para dar de alta al plan del programa accedemos a la opción planes poniendo como
opción la número 7 y pulsando CONTROL.
En la ventana que aparece rellenamos los siguientes datos:
* ENTORNO: Pondremos como entorno DE (desarrollo).
* PLAN: Pondremos el nombre del plan, que es el nombre del programa con una D al
final.
* SUBAPLICACION: La misma subaplicación que hayamos puesto al dar de alta al
programa.
* IND. VIGENCIA: Pondremos una V.
* COD. TECNICO: Las dos primeras letras del nombre del plan.
* PROGRAMA: El nombre del programa al que estamos creando el plan.
165
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
Cuando hemos comprobado que todos los datos son correctos, pulsamos la tecla F6.
Mostrará una nueva ventana para continuar dando de alta al plan. En esta ventana
aparecen todos los datos rellenos (Entorno, Codigo Técnico, Plan y Subaplicacion) por
lo que pulsamos control y continuamos dando de alta al plan. Rellenamos los siguientes
campos:
* FUNCIONALIDAD: Si no esta puesta, la funcionalidad es AP.
* DESCRIPCION: Un texto largo indicando a que programa se le ha creado este plan.
* PROGRAMA PRINCIPAL: El nombre del programa al que se le está realizando el
Plan.
Una vez escritos estos datos, pulsamos CONTROL para confirmar. Pulsamos F3 para
volver a la pantalla anterior y hemos terminado de dar de alta al plan.
En el caso de que además dentro del programa principal se llame a alguna rutina, desde
la pantalla inicial de creacion del plan pondremos el nombre del plan en el campo Plan
y pulsamos CONTROL. Aparece en el centro de la pantalla una línea con el nombre del
plan y sus características. Delante de esa línea escribimos una P (Programas Plan) y
pulsamos CONTROL. Nos muestra una pantalla con todos los programas que tenemos
asignados a este plan indicando si son programa principal o no. Para añadir una nueva
rutina al plan debemos de pulsar la tecla F6. Se abre la ventana de añadir programas al
Plan. En el campo Ind.Pgm.Principal indicamos que no es un programa principal (ya
que es una rutina que llamamos desde dentro del principal) con una N. En el campo
Programa escribimos el nombre de la rutina y para confirmar pulsamos CONTROL. Si
queremos añadir más rutinas seguimos introduciendo sus nombres y pulsando
CONTROL, comprobando siempre que en Ind.Pgm.Principal siga estando una N.
Cuando terminamos de introducir todas las rutinas, volvemos a la pantalla inicial del
plan y volvemos a poner una P a la izquierda en la linea del nombre del plan y pulsamos
CONTROL para comprobar que en el listado de la pantalla que se nos muestra aparece
el programa principal y todas las rutinas que utiliza. Debemos de tener cuidado al
introducir todo esto ya que luego no se nos permite realizar modificaciones.
2.3.
COMPILAR Y HACER UN BIND DEL PROGRAMA.
La compilación del programa y el bind del programa y el plan los vamos a realizar a
través de la opción 9 (Repositorio de objetos de arquitectura) que se encuentra dentro
del menú de la arquitectura. Escribimos como opción la número 9 y pulsamos
CONTROL.
2.3.1 Compilar el programa.
Para compilar el programa debemos hacerlo a través de la arquitectura y para
corregir los errores de compilación debemos hacerlo a través de la
cola del spool y con el editor del ISPF como se explicó en los apartados ...
((PONER LOS APARTADOS)).
Al entrar en la opcion 9 de la arquitectura aparece la ventana de control de repositorio.
Ponemos la opción 2, Compilaciones y pulsamos CONTROL.
En el menú de Compiladores, escribimos la opcion 1 (solicitud de compilaciones) y
pulsamos CONTROL. La opcion 2 (Consulta de compilaciones Diferidas) no se utiliza
porque son las compilaciones en diferido, es decir, se lanza un Job y ya se ejecutará
cuando se pueda ya que se mete en una cola.
Cuando hemos entrado en la ventana de compilación ponemos:
166
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
-> En ENTORNO ponemos DE si no esta puesto.
-> En MÓDULO escribimos el nombre del programa que queremos compilar.
Dejamos los demas campos vacíos y pulsamos CONTROL.
Nos aparece en esa pantalla una línea con el nombre de nuestro programa y sus
características. Delante del Nombre escribimos un Z de Compilacion en Pruebas y
pulsamos CONTROL.
Se abre una nueva ventana en la que tenemos que rellenar los siguientes Campos:
-> En 1er PUNTERO ponemos la primera parte de la librería donde se encuentra el
código del programa. (En nuestro caso, normalmente es
DES.ISWF)
-> En 2dos PUNTEROS ponemos la siguiente direccion de la librería donde se
encuentra el programa. (En nuestro caso, normalmente TRABAJO).
-> En 3ros PUNTEROS el resto de la libreria del programa. (En nuestro caso,
normalmente es INS.SWF).
-> En miembro ponemos el nombre del programa que queremos compilar.
-> En borrar Spool si Comp. OK ponemos una N indicando asi que siempre nos escriba
en la cola del spool el resultado de nuestra compilacion.
Una vez rellenados todos estos campos, dejamos los otros como vienen por defecto y
pulsamos CONTROL.
Se abre una nueva ventana emergente informativa de las librerias y base de datos que
utilizará para la compilacion. Pulsamos F5 y esperamos a que desaparezca esa ventana y
vuelva a la pantalla inicial de compilacion.
Una vez haya vuelto a esa pantalla, debemos ir al ISPF, a la cola del spool para ver
nuestra compilacion como se explica en el apartado .... ((PONER APARTADO)).
2.3.2
Hacer BIND del programa y su plan.
Hacer Bind significa que enlazamos el contenido del programa o del plan al resto de
componentes que necesita para su ejecución, sobre todo DB2.
Por tanto, es necesario hacer el Bind del Programa y del Plan del Programa cuando este
utilice DB2.
Al entrar en la opcion 9 de la arquitectura aparece la ventana de control de repositorio.
Ponemos la opción 3, Bind y pulsamos CONTROL.
Entramos en la pantalla de Lanzar Bind en Batch, en la que tenemos que informar los
siguientes campos:
-> En Entorno de Bind escribimos DE.
-> En Nombre de Objeto ponemos el nombre del programa o del plan del programa,
dependiendo del bind que estemos realizando.
-> En Tipo de objeto pondremos:
* PGM si lo que estamos haciendo es el Bind del Programa.
* PLN si lo que estamos haciendo es el Bind del Plan.
El resto de campos los dejamos como están y pulsamos CONTROL para confirmar el
Bind.
167
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
2.4. VISUALIZACION Y MANEJO DE LAS TABLAS DB2 DE LA
ARQUITECTURA.
UNA ADVERTENCIA ANTES DE UTILIZAR LAS TABLAS DB2 DE LA
ARQUITECTURA: ESTAS TABLAS SON COMUNES PARA TODOS LOS
USUARIOS DE LA ARQUITECTURA, POR LO QUE SI TENEMOS UN
PROGRAMA QUE INSERTA DATOS O BORRA DATOS DE LAS TABLAS,
DEBEMOS DE AVISAR ANTES A NUESTRO JEFE PARA VER COMO LO
HACEMOS (O LO INSERTAMOS O BORRAMOS DE LA TABLA O LO
SIMULAMOS DE ALGUNA MANERA EN NUESTRO PROGRAMA, PERO
DEBEN DE INDICARNOSLO).
La tablas con las que trabajamos en nuestros programas pertenecen a bases de
datos que se encuentran en la arquitectura ISBAN, por lo para poder
visualizar su contenido hay que hacerlo desde el menú de desarrollo de ISBAN
(pantalla del menú inicial de ISBAN). Desde aqui, en lugar de poner
la opcion AR, vamos a poner la Opcion QMF. Pulsamos CONTROL y nos
aparece una ventana donde tenemos que seleccionar la base de datos que
usamos de las dos existentes. La que nosotros utilizamos es DBD1, por lo que
ponemo como opcion 1 y pulsamos CONTROL.
Se muestra la pantalla de QMF. Para poder escribir una sentencia SQL (un
QUERY) de alguna de las tablas, pulsamos la tecla F6 y se nos muestra la
pantalla de SQL QUERY.
Debajo de donde pone SQL QUERY, en la parte superior izquierda de la pantalla
escribiremos la sentencia select que queremos realizar. Para los
nombres de las tablas, debemos ponerles antes del nombre el campo DESADM.
Por ejemplo, si tenemos la tabla T_EJEMPLO, una sentencia select
quedaría:
SELECT * FROM DESADM.T_EJEMPLO;
Una vez escrita la sentencia, pulsamos la tecla F2 para que la ejecute y nos
muestre la información que contiene la tabla.
2.5 EL DEBUG DE PROGRAMAS ON-LINE (CICS).
CICS ((TRANSACCIONES)).
ANEXO1. COMPILACION Y EJECUCIÓN DE FICHEROS CON JCL.
(((Poner varios ejemplos de JCL e indicar que existen manuales sobre como usar
JCL).
ANEXO2. CREAR UN PROGRAMA DE PRUEBA DE RUTINAS CUANDO
HEMOS PROGRAMADO UNA RUTINA.
Cuando el programa que estamos realizando es una Rutina, debemos hacer un programa
de pruebas para él. Para ello, en la librería de pruebas que tengamos (en nuestro caso
DES.DESRLB.FTE) editamos un programa que ya exista (ver ejemplo de programa que
viene debajo) y lo modificamos para llamar a nuestra rutina. Debemos tomar un
168
Software Factory
Cáceres –
Rafael Campillo Lorenzo.
programa de pruebas que ya exista y este dado de alta en la arquitectura y esté tambien
dado de alta su plan, dando de alta a la nueva rutina dentro del plan del programa de
pruebas. Si el programa es nuevo, entonces tendremos que darle de alta en la
arquitectura, dar de alta su plan, añadir la rutina al plan y si usa DB2 hacer un bind del
programa y el plan.
Cuando tengamos modificado el programa (o creado y dado de alta si lo hacemos
nuevo), lo compilamos a través de la arquitectura y comprobamos después a través del
debugger IBD si funciona. Como el programa llama a la rutina, probamos por tanto si
funciona nuestra rutina.
169

Documentos relacionados