Академический Документы
Профессиональный Документы
Культура Документы
Software Factory de Cceres CENIT INSA Rafael Campillo Lorenzo CCERES Ao 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
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. Caractersticas 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. Documentacin 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 dinmicos para salida ..................................................................... 16 7.4. Soporte Fsico ............................................................................................... 17 7.5. Concatenacin 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 aplicacin 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. Catlogos ...................................................... 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
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. CONCATENACIN DE FICHEROS ..................... 53 REGLAS DE CONCATENACIN ........................................................................ 53 ANEXOS ................................................................................................................. 55 ANEXO A: Notas y apuntes sobre COBOL y codificacin. ...................................... 55 ANEXO 1: Listado de FILE STATUS.................................................................... 57 ANEXO 2: Tutorial de los SQLCODES y sus causas .............................................. 62
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 Ordenacin bsica .......................................................................................... 103 Ordenacin parcial ......................................................................................... 104 Copia de un fichero......................................................................................... 105 Copia parcial de un fichero ............................................................................. 106 Ordenar y cambiar disposicin 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 ESPAOL........................................ 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 - Parmetros de la funcin XX_CANCELACION_PROCESOS_BATCH........... 98 8 - SORT - Ordenacion bsica .................................................................... 103 9 - SORT - Ordenacion parcial.................................................................... 104 10 - SORT - Copia de un fichero ................................................................. 105 11 - SORT - Copia parcial de un fichero...................................................... 106
Figura 12 - SORT - Ordena y cambia disposicion de campos .................................. 107 Figura 13 - SORT - Eliminar repetidos................................................................... 108 Figura 14 - SORT - Acumular................................................................................ 109
SYSTEM
PRODUCTIVITY
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 aos 80, incluyendo SPFPC. Principalmente provee a la terminal IBM 3270 de un interfaz con mens y dilogos 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 aplicacin. Muchos productos vendidos para el sistema operativo MVS utilizan los mens de ISPF para acceder a sus herramientas.
3. CICS. SYSTEM)
(CUSTOMER
INFORMATION
CONTROL
Figura 1 - Subsistemas del OS-390 CICS es un gestor de transacciones. La ejecucin de un programa es una transaccin, y cada transaccin genera una Tarea. Una Transaccin es cada una de las entradas que se realiza desde el Terminal. Una Tarea es la unidad de trabajo de CPU creada por una transaccin. Cuando se invoca una transaccin, un programa determinado se carga en memoria y se inicia la Tarea. As aunque varios usuarios invoquen la misma transaccin, cada uno tendr una tarea distinta. CICS es multitarea (concurrencia). Adems varias tareas diferentes pueden compartir el mismo programa si este es reentrante (no cambia en ningn 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 aplicacin en tiempo real entre los programas de aplicacin y el sistema operativo. Se podra pensar que el CICS es un Sistema Operativo dentro de otro Sistema Operativo. En estos trminos, CICS es un SO especializado cuya finalidad es proveer un entorno para la ejecucin de programas de aplicacin 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 algn dato por el Terminal; la informacin viaja por la lnea telefnica hasta el ordenador central; ste procesa la solicitud (por ejemplo una peticin de saldo) y enva la respuesta al Terminal que efectu la peticin. Un Monitor de Teleproceso (CICS) junto a un adecuado Mtodo de Acceso a Telecomunicaciones (VTAM), permiten que este trasiego de informacin se efecte de forma muy rpida y eficaz. En un sistema BATCH los recursos utilizados (principalmente ficheros) slo estn disponibles cuando el programa ha acabado de usarlos, llegando as a estar accesibles para cualquier peticin. Hay varios CICS: Para Desarrollo, Explotacin, Test, Correo Electrnico.
Desde el punto de vista de la utilizacin de MEMORIA: Un programa BATCH mantiene reservado para su uso exclusivo todo el espacio fsico de memoria requerido por el programa durante todo el tiempo de ejecucin. Sin embargo en un programa ON-LINE bajo CICS, es ste el que gestiona dinmicamente la memoria, proporcionando reas de memoria segn las necesidades del programa que en ese momento se estn ejecutando.
Desde el punto de vista de utilizacin de FICHEROS, Un programa BATCH hace un uso exclusivo de la informacin 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 informacin de cualquier fichero que reconozca el CICS sin requerir una definicin expresa en el programa, pudiendo ser esto mismo realizado por cualquier otro programa que tambin se est ejecutando bajo CICS.
Un programa BATCH enva sus instrucciones de E/S directamente al SO. Los programas de aplicacin del CICS enva tales instrucciones al CICS y ste maneja el interfase con el Sistema Operativo. Desarrollo de aplicaciones en HOST. Teniendo la estacin de trabajo conectada al HOST, bajo MVS y desarrollando las aplicaciones bajo TSO O bien funcionando de forma autnoma disponiendo de un CICS/OS2.
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 rpida 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.
10
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: Tambin emite comandos SQL con la salvedad de que el proceso a realizar est ya escrito en un fichero y permite usar sentencias de definicin de datos PROEDIT: Editor para tablas DB2 que permite procesar tablas DB2 fcil y rpidamente pues es de apariencia similar al ISPF. Usando esta aplicacin se pueden modificar filas de las tablas sin conocimientos de SQL. LIBRARIAN: Es un gestor de mdulos 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 compilacin de cambio de entorno no falle. Herramientas de desarrollo ON-LINE
11
CREATE
DATABASE
NombreDB
DROP
DATABASE
NombreDB
DROP
TABLE
SELECT Campo1, ... ,CampoN INTO :Var1, ... , :VarN FROM Tabla WHERE condiciones GROUP BY Agrupaciones para sacar datos comunes
12
HAVING Filtro. Establece condiciones pero para grupos ORDER BY Ordena INSERT INTO Tabla (Campo1, Campo2, , CampoN) VALUES (Valor
EXEC SQL DECLARE Nombre-cursor SELECT WHERE Campo = var END-EXEC PROCEDURE DIVISION
CURSOR FOR
13
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 indicrselo al cursor cuando se
PROCEDURE DIVISION
EXEC SQL UPDATE Tabla SET Campo = :valor WHERE CURRENT OF Nombre-cursor END-EXEC
Slo 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
14
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 extensin 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 SELECCIN
15
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.
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 alocacin dinmica de ficheros sincroniza la actualizacin 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 dinmicos como procesos de COMMIT se hayan realizado y posteriormente realizar una unin de todos ellos.
17
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.9. Esqueletos
Para facilitar la codificacin de los programas se disponen de unos esqueletos en 5 modalidades distintas segn utilicen ficheros secuenciales o tablas DB2, de entrada o salida. Dichos esqueletos son unas plantillas sobre las que se insertar la lgica de nuestro programa. En ellos se controla todo el proceso de reposicionamiento y relanzamiento. Se encuentran en la librera: SIS.GRUR.EJEMPLOS. REPOSPS: Esqueleto de programa que efecta 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 explcitamente ya que se utilizar la variable RUR-CALL de la copy RUROPER para hacer llamadas dinmicas 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
proceso debe borrase el ltimo fichero utilizado porque se intentar crear de nuevo, obteniendo un error de catlogo 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 contina 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 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 aplicacin en base a un ejemplo real. Programa LQBBN01.
Lo primero que se ha de hacer siempre que nos enfrentemos a la resolucin de programas de este tipo es identificar del tipo de programa: Se debe buscar el esqueleto que ms se ajuste al programa que se va a ejecutar. A continuacin se obtiene una copia del esqueleto pasando el esqueleto a nuestras libreras, sin modificar lo directamente pues ms adelante sern utilizados por otros usuarios. Durante la codificacin 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 situacin al punto donde se qued.
19
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. Podra ser utilizada la tabla DAREPOS si el volumen de los datos lo permite. Es importante decidir el criterio lgico de COMMIT, es decir, cada cunto tiempo se realiza un commit. Se puede establecer segn el nmero de registros ledos del fichero maestro, tratados o grabados en el fichero de salida, o segn el nmero de acceso a una tabla DB2, pero se ha de tener clara la lgica 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 lgica se ha decidido ir incrementando el contador en base alas lecturas del fichero maestro. Los programas Batch con reposicionamiento reciben como entrada los parmetros necesarios para su control. No son parmetros de aplicacin, si necesitase otros parmetros para su proceso estos debern pasarse al programa mediante ficheros de entrada. Los parmetros para el control del reposicionamiento son: PLAN Nombre del plan a ejecutar con reposicionamiento. Debera corresponder con el propio. NUMREG Nmero de registros que se van a procesar antes de cada confirmacin. Realmente no tiene porque indicar el nmero de registros de entrada: slo es el tope del contador del bucle de proceso de registros. NUMPROC Nmero del proceso asociado a ese Job. Normalmente siempre es '1' salvo el caso de programas que bifurcan y tratan tablas distintas segn alguna entrada que lean. En este caso se pueden lanzar dos o ms Jobs en paralelo con el mismo programa/plan pero distinto Nmero 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 parmetro es opcional, si no se pone toma por defecto SYSDA. Ahora se han de preparar las tablas para la ejecucin. Para ello se han de obtener y modificar los JCL's correspondientes. No debemos olvidar probar el proceso de relanzamiento una ver construdo 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 LIQUIDACIN DE CONTRADOS DE PRSTAMOS.(SALDO_VALOR_
20
* _PTM). * A PARTIR DEL FICHERO DE ALTAS DEL DA(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 VLIDA(ENCONTRADA EN * EL FICHERO DE CONTRATOS) GENERAMOS UN REGISTRO EN LA TABLA * SALDO_VALOR_PTM CON EL SALDO A 0 POR CADA POSICIN LEDA 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 PARMETROS JCL A LA RURCOMM, Y * ACCEDE AL DB2 * **************************************************************************************** ** * * TABLAS: * TABLA1: SALDO_VALOR_PTM * * SALDOS VALOR PARA LIQUIDACIN DE CONTRATOS * DE PRSTAMOS * **************************************************************************************** *** **************************************************************************************** *** * * 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
* FICHERO CON LAS ALTAS DEL DA.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
**************************************************************************************** *** *** CLAVES DE RELANZAMIENTO Y DE REPOSICIN PARA EL *** FICHERO CONTBA3 Y ALTAS1
En caso de que un programa vea cancelada su ejecucin y tengamos que relanzarlo, tenemos que releer el fichero maestro hasta el punto guardado tras el ltimo COMMIT efectuado antes de su cada. 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 CLAVE-ALTAS1. 10 IDEMPR-ALTAS1 10 IDCENT-ALTAS1 10 IDPROD-ALTAS1 10 IDCONTR-ALTAS1 CLAVE-CONTBA3. 10 IDEMPR-CONTBA3 10 IDCENT-CONTBA3 10 IDPROD-CONTBA3 10 IDCONTR-CONTBA3 PIC PIC PIC PIC PIC PIC PIC PIC X(4). X(4). X(3). X(7). X(4). X(4). X(3). X(7).
01
**************************************************************************************** *** *--- 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)
**************************************************************************************** *** *** 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 DA COPY BNYDE008. * COPY DEL FICHERO ERRALTA COPY JWYARC01.
23
**************************************************************************************** *** *** 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 ACTUALIZACIN 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
25
*-----------------------------------------------------------* DEFINICIN 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 recibirn los datos pasados en PARMETROS en el JCL a travs de la copy RURCOMM.
01 PARMLIST. 05 PARM-LNG 05 PARAMETRO PIC PIC XX. X(200).
Algo que llamar la atencin 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 lgica de nuestro programa encaje exactamente con A100-INICIO-PROGRAMA, A400-PROCESOPROGRAMA Y S900-FIN, ya que iremos entremezclando nuestra lgica 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.
26
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 parmetros 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 parmetros 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 Nmero de proceso. CA-NUMREG Nmero de registros tratados en cada confirmacin (COMMIT). CA-PREF Prefijo de los ficheros, depender del subsistema donde se est ejecutando (DES: desarrollo, SIS: sistemas, EXP: explotacin). Cuando el proceso tiene ficheros de salida, esta llamada a la rutina sirve tambin para recuperar sus datos, que se almacenarn la variable CA-DDNAMES de la copy RURCOMM.
CALL RUR-CALL MOVE USING RUR-INIT RURCOMM PARAMETRO TO UR-PROCESO
CA-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 nmero de proceso pasados en los parmetros de reposicionamiento y se recuperar una nica fila.
EXEC SQL OPEN REP
27
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 EJECUCIN 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 confirmacin (COMMIT) para liberar el bloqueo sobre la tabla DAREPOS. sta no contabiliza en el proceso del nmero de
28
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 ejecucin se complet correctamente, sin ningn 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 nmero de validaciones a cero. Adems 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
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
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 ejecucin acab con un abend o un error despus 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 informacin del puntero (RUR_PUNTEROS) a la variable utilizada para el reposicionamiento: CLAVE-ALTAS1. Se recupera el nmero 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
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
**************************************************************************************** ********* * * A100-INICIO-PROGRAMA. * * SE INICIALIZAN TODAS LAS VARIABLES PARA CAMPOS DE LA FUNCIN * DE ERRORES Y LOS CAMPOS DE ESTADSTICAS. ADEMS 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
32
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 OPERACIN CORRECTAMENTE. EN CASO CONTRARIO SE * LLAMA AL PRRAFO 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
33
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 CONTNUO * EN EL QUE SLO SE SALDR CUANDO SE LLEGUE AL FINAL DEL FICHERO * DE ALTAS1 OR CONTBA3, O SE DETECTE ALGN ERROR MENCIONADO A * CONTINUACIN QUE INDIQUE EL FINAL DEL PROGRAMA * ************************************************************************************** A400-PROCESO-PROGRAMA.
Se van alocando los ficheros de salida dinmicamente por cada commit que se realiza.
PERFORM S400-PROCESO-COMMIT THRU S400-PROCESO-COMMIT-EXIT UNTIL FIN-PROCESO OR SI-ERROR.
El programa contendr, despus de su inicio, un bucle externo y otro interno. El bucle externo, se repetir hasta que no haya ms 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 incluirn las siguientes tareas, adems de las propias de la aplicacin. Ext. 1. Iniciacin del contador de registros procesados a 1. Ext. 2. Alocacin de los ficheros de salida, si existen en el proceso. Se har una llamada a la rutina UR0000 con el parmetro 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 nmero de confirmacin, alocando dinmicamente cada uno de ellos. Si durante este proceso se produjese algn 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. Parmetro del JCL. DDDDDDDD es el nombre de la dd del fichero, informacin contenida en la tabla DAPROCBATCH. PPPPPPPP es el nombre del plan. Parmetro del JCL.
34
Rnn. Nmero del proceso. Parmetro del JCL. Vnnnn. Nmero 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 secunciales 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 (parmetro introducido en el JCL), se acaban los datos de entrada o hay algn error. Int. 1. Lectura del siguiente dato de entrada. Int. 2. Proceso propio de la aplicacin. Instrucciones para el tratamiento de los datos de entrada. Int. 3. Actualizacin 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 nmero de validaciones (CACOMMIT) Slo si no hay ficheros de salida, se debe sumar 1 al nmero de validaciones, variable CA-COMMIT proporcionada por los parmetros del JCL. En caso de que existan ficheros de salida NO se debe actualizar el nmero de validaciones, por que lo hace la rutina UR0000 y si se vuelve a hacer en el programa provocar errores. Ext. 7. Slo si hay ficheros de salida, actualizar el nmero de validaciones y el puntero en DAREPOS. Actualiza la fila de la tabla DAREPOS correspondiente a este plan/proceso sumando uno al nmero 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 parmetros 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 APLICACIN CONSTRUIR EL NOMBRE DE FICHERO CORRESPONDIENTE * PARA CADA DDNAME Y NMERO DE COMMIT, ALOCANDO DINMICAMENTE * 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
FS-ERRALTA
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 * EXEC SQL UPDATE DAREPOS SET RUR_NUMCOMM RUR_PUNTEROS WHERE RUR_PLANNAME AND RUR_PROCES END-EXEC. MOVE SQLCODE EVALUATE WHEN WHEN EXEC-FUN TO TO TO UR-VALOR-REGISTRO-TEXT UR-VALOR-REGISTRO-LEN
SW-DB2-RETURN-CODE
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
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 LGICA DEL PROGRAMA. Este sera el prrafo proceso utilizado en nuestro programa. Enfrentamos el fichero maestro ALTAS1 con el fichero CONTBA3.
IF ELSE IF CLAVE-ALTAS1 EQUAL TO CLAVE-CONTBA3 TRUE SET SW-SI-LEE-ALTAS1 PERFORM THRU PERFORM THRU CLAVE-ALTAS1 LESS THAN CLAVE-CONTBA3 SET SW-SI-LEE-ALTAS1 TO TRUE CONTINUE
9200-LEER-FICH-CONTBA3 9200-LEER-FICH-CONTBA3-EXIT UNTIL (CLAVE-ALTAS1 LESS THAN CLAVE-CONTBA3) OR (CLAVE-ALTAS1 EQUAL CLAVE-CONTBA3)
*---
ADD CN-UNO
*------------------------------------------------------------------------------------------------* *--- 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
37
Estado Final (F) Un proceso se encuentra en estado final cuando despus de su ltima ejecucin correcta AN 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 ningn dato. Puesto que los ficheros de salida definitivos an no se han creado. En este caso debera 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
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
************************************************************************************** * 2100-PARRAFO-ALTAS * * POR CADA POSICIN SE HA DE DAR UN ALTA EN LA TABLA SALDO_VALOR * _PTM, COM EL CAMPO POSICIONES LQYCONTL-OSICIONES ES DE 24 * CARACTERES Y CADA POSICIN EST DEFINIDA CON 3 CARACTERES,COMO * MXIMO SERN 8 LAS POSICIONES QUE SE PODRN DAR DE ALTA ************************************************************************************** 2100-PARRAFO-ALTAS. MOVE MOVE LQYCONTL-POSICIONES CN-UNO 2150-POSICIONES 2150-POSICIONES-EXIT IND-I GREATER THAN W-POSICION(IND-I) EQUAL TO TO W-POSICIONES IND-I
CN-OCHO SPACES.
2100-PARRAFO-ALTAS-EXIT. EXIT. ************************************************************************************* * 2150-POSICIONES * * COMO MXIMO SE DAN DE ALTA 8 POSICIONES EN LA TABLA * SALDO_VALOR_PTM ************************************************************************************* 2150-POSICIONES. MOVE W-POSICION(IND-I) PERFORM 2200-ESCR-SALDO-V-PTM THRU 2200-ESCR-SALDO-V-PTM-EXIT ADD 1 TO IND-I. TO W-POSICION-ALTA
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 POSICIN LEDA EN EL FICHERO CONTBA3 ************************************************************************************** 2200-ESCR-SALDO-V-PTM. MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE *--MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE BNYDE008-FECAPER(1:4) BNYDE008-FECAPER(6:2) BNYDE008-FECAPER(9:2) FECAPER-FECHA CN-CERO CN-CERO CN-CERO CN-DIECISIETE REG-SALDOS-VALOR-TRA(1) TO TO TO TO TO TO TO TO TO FECAPER-NUM(1:4) FECAPER-NUM(5:2) FECAPER-NUM(7:2) FEC-VALOR-TRA(1, 1) DIAS-AVX-TRA(1, 1) DIAS-AVB-TRA(1, 1) SALDO-VALOR-TRA(1, 1) E4294-IMPSALV-LEN E4294-IMPSALV-TEXT 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
39
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 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 ESTADSTICAS 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 TO TO TO TO TO TO CONT-ERRALTA W-COPY-IDEMPR W-COPY-IDCENT W-COPY-IDPROD W-COPY-IDCONTR W-COPY-CODERROA W-COPY-IDSTIPRO TO TO TO TO WK-DESCRIPCION WK-PARRAFO WK-TABLA-DB2 WK-DATOS-ACCESO
40
FS-ERRALTA NOT EQUAL PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF. 2300-ESCR-ERR-ALTA-EXIT. EXIT.
************************************************************************************** * 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 . 3100-CERRAR-FICHEROS-EXIT. EXIT. ************************************************************************************** * 9100-LEER-FICH-ALTAS1 * * SE REALIZA LA LECTURA DEL FICHERO DE ALTAS1,ACUMULANDO LAS * ESTADSTICAS 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 TO TO TO TO TO TO
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
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 * ESTADSTICAS Y TRATANDO SI PROCEDE UN POSIBLE ERROR EN LA * LECTURA ************************************************************************************** 9200-LEER-FICH-CONTBA3. READ 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 TO TO TO TO TO TO
IF
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
* 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 DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY CONT-CONTBA3 CONT-ALTAS1 CONT-ERRALTA CONT-SALDO-VALOR-PTM TO TO TO TO WK-CONT-CONTBA3 WK-CONT-ALTAS1 WK-CONT-ERRALTA WK-CONT-SALDO-VALOR-PTM
9500-ESTADISTICAS-EXIT. EXIT.
43
Cada trabajo tiene asignado una clase de ejecucin que establece unas prioridades en la cola de ejecucin. 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 ejecucin 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. Definicin de registros: Registros Lgicos: Es el que mejor se adapta al programa con el que estamos trabajando. Registros Fsicos: Es el que mejor le viene a la mquina con la que estemos trabajando.
44
// Campo delimitador de una sentencia, estando ambas barras en las dos primeras columnas. // * Continuacin de una sentencia en la siguiente lnea.
NOMBRES-SENTENCIAS: Han de ser como mximo 8 caracteres alfanumricos ms #, @ y $, y no pueden comenzar por un nmero. Cada sentencia JCL debe estar en maysculas.
La sentencia JOB indica el comienzo de un trabajo e indica al sistema cmo procesarlo. Es necesaria y debe ser la primera en cada trabajo. Parmetros 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 asignacin 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
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 Ejecucin.
NOTIFY Solicita que, cuando el trabajo finalice, el sistema enve un mensaje al ID de usuario de TSO especificado. NOTIFY=&SYSUID TIME Especifica la longitud mxima de tiempo durante la cual un trabajo o un paso de trabajo utilizarn el procesador. El tiempo de procesador utilizado se indica mediante mensajes. Con este parmetro 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 comprobacin. RESTART=NombrePaso. REGION Se usa para especificar la cantidad mxima 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 parmetros_posicionales parmetros_palabra_clave Los programas referencian NOMBRESDD (definicin de datos): COBOL SELECT PEDIDOS ASSIGN TO PEDIDOS JCL //BE05R JOB CLASS= //* //INFPEDID EXEC PGM=DEMOPROG //PEDIDOS DD DSN=PEDIDOS.DIC,DISP=SHR //INFORME DD SYSOUT=X ( SPOOL) //*
El NOMBREDD es un nombre lgico. Un nombre de fichero (data set name es el nombre de un fichero fsico (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 lgico y un fichero o spool fsico. Parmetros posicionales:
46
*: Definimos un fichero incorporado. Podemos escribir en las lneas 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 asignacin de dispositivos, la asignacin de espacio y la disposicin de ficheros deben ignorarse. Define un fichero ficticio. Es una especie de comodn. //NOMBREDD (DATOS) /* //* //NOMBRE DD DD [* / DATA] //(fin de datos) DUMMY
Parmetros 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 tambin puede haber nombres de ficheros compuestos, que tendrn como mximo 44 caracteres (incluyendo los puntos): T971650.FICHERO.COBOL. No es muy prctico utilizar nombres simples de fichero en un entorno con muchos ficheros. Suelen utilizarse nombres compuestos. Adems, un nombre de fichero con un nico calificador se catalogar en el catlogo maestro, situacin que se debe evitar a toda costa. Cada nombre debe ser nico cuando se utiliza el catlogo. Un miembro de un fichero particionado puede utilizarse como si fuera un fichero secuencial poniendo el nombre de miembro entre parntesis. Dentro de un fichero PDS (biblioteca), tenemos tambin 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 parmetro DSN de la sentencia DD ser el sistema quien asignar un nombre. Es posible hacer referencia a un fichero despus de su primera utilizacin 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
DISP Indica la disposicin del fichero. Puede estar creado o ser nuevo, podemos compartirlo o no DISP=(ESTADO INICIAL, =(NEW =(OLD =(SHR =(MOD TERMINACIN NORMAL, ,DELETE ,KEEP ,CATLG ,PASS TERMINACIN ANORMAL) ,DELETE) ,KEEP) ,CATLG) ,UNCATLG)
Todos los subparmetros del parmetro DISP son posicionales. ESTADO INICIAL: Es el estado actual del fichero: NEW se usa cuando el fichero an 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 aadirse nuevos datos detrs de los ya existentes en un fichero secuencial. Si el fichero an no existe, MOD equivaldr a NEW.
TERMINACIN NORMAL: Indica la disposicin del fichero cuando el paso finaliza de manera normal. TERMINACIN ANORMAL: Indica la disposicin del fichero cuando el paso finaliza de manera anormal (ABEND). DELETE: Borra el fichero. Tambin desaparece su nombre del catlogo. 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 estn catalogados no necesitan (ni pueden) volverse a catalogar. UNCATLG: Descataloga el fichero. El nombre del fichero se elimina del catlogo, 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 slo ser posible mediante la VTOC. Si no se indica el parmetro DISP, por defecto tomar los valores: DISP(NEW,DELETE,DELETE) Creara un fichero temporal que al termino del trabajo se borrara. Usos ms frecuentes de DISP: DISP=SHR Toma como valor por omisin 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 automticamente del catlogo.
48
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 parmetro. UNIT=TAPE UNIT=SYSDA =SYSALLDA VOL VOL=SER=EDPAK5 SER sera el nmero de serie =REF=NOMBREFICH <<Una unidad es fsica, y un volumen es lgica. Mi HD sera la unidad y una particin sera un volumen>> DCB Bloque de Control de Datos. FORMATO DEL REGISTRO DCB=(RECFM=(F,FB,V,VB,V), LG DEL REGISTRO TAMAO BLOQUE LRECL=80, BLKSIZE=3600)
SPACE SPACE=(TipoUnidad(TRK,CYL,), (PQ,SQ,DIR), RLE (Defragmentar o comprimir)) DIR: Nmero 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 =*
JOBMSGCLASS=X.
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 mximo 255 pasos. Parmetros 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 Parmetros de palabra Clave:
49
ACCT Especifica informacin de contabilidad para este paso ADDRSPC Indica el tipo de memoria para este paso (virtual o real) COND Indica la comprobacin del cdigo 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 tambin en el JOB, es el de ste el que manda. DPRTY Asigna una prioridad de despacho para el espacio de direcciones DYNAMNBR Mantiene un nmero de asignaciones de ficheros para su reutilizacin PARM Transfiere informacin 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 automtico 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 tambin en el JOB, es el de ste el que manda. TIME Indica el tiempo mximo 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 tambin en el JOB, es el de ste el que manda.
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 continuacin de sentencias: 1- interrumpir la sentencia en una coma 2- teclear un carcter (que no sea espacio en blanco) en la columna 72 3- continuar la sentencia empezando en la columna 16 de la lnea siguiente.
50
La sentencia de control de utilidades se codifica inmediatamente despus 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 mayora 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, ampla o incorpora miembros a un PDS, crea ficheros editados, cambia la distribucin en bloques o modifica las longitudes de registro lgico de un fichero //PASO1 EXEC PGM=IEBGENER //* Sentencia DD que suele estar en la mayora 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 EDICIN. 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
Slo 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 NMERO 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 ms ficheros secuenciales creados por una operacin de descarga a un PDS(carga) y compresin de un PDS: copindolo sobre s mismo. //PASO1 EXEC PGM=IEBCOPY //* Sentencia DD que suele estar en la mayora 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,) QUE QUEREMOS COPIAR, O LOS QUE NO. /* O PONEMOS UN U OTRA, LOS
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 COMODN. Ejemplo: imaginemos que queremos crear un fichero en un paso y no queremos que haga nada mS: //PASO1 EXEC PGM=IEFBR14 //FICHERO1 DD DSN=FICHERO,DISP=, JCL no nos dejara poner esta sentencia sola. Para ello necesitaramos meterla en un paso. Usamos nuestro comodn 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
//SORTIN2
DD.
//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 gestin de espacio de datos en Disco. Sentencias: COMPRESS, COPY, DUMP, RELEASE, RESTORE.
53
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
ANEXOS
ANEXO A: Notas y apuntes sobre COBOL y codificacin.
Los grupos de datos en COBOL son ALFANUMRICOS (Caracteres). Un nmero NO se puede mover a un alfanumrico, pero s a un grupo, con lo que as podramos hacer una conversin de NMERO a ALFANUMRICO declarando el alfanumrico como numrico dentro del grupo y con el mismo tamao, pero ocpuamos 2 zonas distintas de memoria REDEFINE. Ambas variables apuntan a la misma zona de memoria. Ha de ir a continuacin 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 tamao. Para realizar la operacin contraria, es decir, mover ALFANUMRICO a un NUMRICO o compacto, definimos tambin 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 TO FECAPER-NUM(1:4) FECAPER-NUM(5:2) FECAPER-NUM(7:2) 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 quedndonos con la de DB2, y podemos crear un nuevo fichero CREATAB.SQL cambiando los NOT NULL por NOT NULL WITH DEFAULT. Otra manera sera idntica pero usando el SCRIPT del centro del mandatos e insertando la sentencia SQL (CREATE TABLE NombreDCLGEN), usando tambin la DCLGEN. Para INSERTAR valores en la tabla, tenemos tambin dos opciones. O nos creamos un fichero INSERT.SQL donde generamos la sentencia SQL del INSERT (copiaramos la parte de la tabla de la DCLGEN y daramos valores a los campos que nos interesase), o En el centro de mandatos, pinchamos en la pestaa INTERACTIVOS / SQL ASSIST, seleccionamos la opcin INICIAR / INSERT, y en la pestaa TABLAS seleccionamos la tabla en la que queremos insertar. Por ltimo vamos a la pestaa INSERTAR donde ya nos aparecen todos los campos de la tabla. De esta manera adems 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
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 despus de cada ejecucin que nos cambie los valores de la tabla, o bien usar en el cdigo la sentencia ROLLBACK que vuelve las tablas a su estado inicial tras la ejecucin 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 La C siempre ha de acabar abajo. Si tuvisemos un fichero de entrada cuya COPY tuviese muchos campos y la mayora de ellos fuesen COMP -3, resultara tedioso insertar de esta manera varios registros en el fichero para hacer las pruebas. Para ello bastara con generar otro proyecto con un pequeo programa que declarase un fichero de salida, escribiese uno o varios registros en l, y lo cerrase. Ese fichero de salida sera el fichero de entrada que usase nuestro programa. Esta operacin no requiere mucho esfuerzo desde el momento que podemos coger la COPY del fichero para hacer los MOVE ... TO. As controlaramos mucho mejor lo que insertamos en cada registro y dnde lo insertamos. Nosotros ponemos valores numricos y el programa nos los escribe como COMP-3. 3 4 Cifras impares. 5 C
56
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 lgico en el archivo porque ha sido encontrado el fin de archivo. 12 Extensin IBM. No se encontr un registro de Subfile modificado
14 Una sentencia READ secuencial fue intentada para un archivo relativo y el nmero de dgitos significativos en el nmero relativo de registro fue ms largo que el tamao 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 ejecucin satisfactoria de una sentencia READ y la ejecucin 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 ms all de los lmites definidos externamente para un archivo relativo o indexado. Una sentencia secuencial WRITE fue intentada para un archivo relativo y el nmero de dgitos significativos en el nmero relativo de registro era ms largo que el tamao de la clave de registro relativo descrito para el archivo. CPF5006, CPF5018, CPF5021, CPF5043, CPF5272
57
30 No hay informacin adicional. CPF4192, CPF5101, CPF102, CPF5129, CPF5030, CPF5143 34 Existe un error permanente porque existe una violacin, se intent escribir ms all de los lmite definidos externamente para un archivo secuencial. CPF5116, CPF5018, CPF5272, s la organizacin 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 fsico y los atributos especificados para se archivo en el programa. Comprobar error de nivel para el archivo. CPF4131 41 42 Se intent una sentencia OPEN para el archivo en el modo de apertura. 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 ejecucin 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 violacin de ??, existe porque se intento sobreescribir un registro en el archivo y el registro no es del mismo tamao 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 vlido debido a que la sentencia start no se ejecut con xito, la sentencia READ precedente fue insatisfactoria o causa una
58
condicin AT END. CPF5001, CPF5025, CPF5183 47 La ejecucin de una sentencia READ o START fuen intentada sobre un archivo que no est abierto en el modo INPUT o I-O. 48 La ejecucin de una sentencia WRITE fue intentada sobre un archivo que no est abierto en el modo I-O, OUTPUT o EXTEND. 49 La ejecucin 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 genricamente : 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 excepcin y la opcin 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 lgico: Archivo bloqueado El archivo ya est abierto I-O para un archivo cerrado READ despus de fin de archivo
59
CLOSE para un archivo ya cerrado CPF4106, CPF4132, CPF4740, CPF5013, CPF5067, CPF5070, CPF5119, CPF5145, CPF5146, CPF5149, CPF5176, CPF5209 93 94 95 El archivo esta en conflicto con otro usuario. ??? y la ltima operacin no fue un READ satisfactorio. Informacin del archivo invlido 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 errr interno en la estructura del fichero, generalmente se suelen provocar cuando hay un corte elctrico o una salida brusca del programa y algn 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 fsico del disco, en ese caso tambin ser conveniente copiarlo en otro sitio "fsico" 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 operacin de entrada READ desde dispositivo de programa 9 C Falla de adquisicin, la seccin no ha partido o conectado. 9 D El registro est bloqueado CPF5027, CPF5032 9 G Excepcin de salida para dispositivo o sesin 9 H Operacin ACQUIRE fallida. ? Apropiado por otro programa o inhabilitado. (9H es el resultado cuando una operacin ACQUIRE causa cualquiera de las excepciones monitoreadas para 90 o 9N cuando ocurre. 9 I Operacin WRITE fallida CPF4702, CPF4737, CPF5052, CPF5076
60
9 K Nombre de formato invlido, 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 sesin 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
62
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 SQLCODE -939, Error: ROLLBACK REQUIRED DUE TO UNREQUESTED ROLLBACK OF A REMOTE SERVER -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 SQLCODE SQLCODE SQLCODE SQLCODE SQLCODE -926, Error: ROLLBACK NOT VALID IN IMS OR CICS ENVIRONMENT -925, Error: COMMIT NOT VALID IN IMS OR CICS ENVIRONMENT -924, Error: DB2 CONNECTION INTERNAL ERROR, , , -923, Error: CONNECTION NOT ESTABLISHED: DB2 , REASON , TYPE , NAME -922, Error: AUTHORIZATION FAILURE: ERROR. REASON
63
-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 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 ALREADY EXISTS, BUT THIS SAVEPOINT NAME
SQLCODE -881, Error: A SAVEPOINT WITH NAME CANNOT BE REUSED SQLCODE -880, Error: SAVEPOINT
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 SQLCODE SQLCODE SQLCODE -878, Error: THE PLAN_TABLE USED FOR EXPLAIN CANNOT BE ASCII -877, Error: CCSID ASCII IS NOT ALLOWED FOR THIS DATABASE OR TABLE SPACE -876, Error: -875, Error: CANNOT BE CREATED, REASON CANNOT BE USED WITH THE ASCII DATA REFERENCED MUST BE THE SAME AS THE
SQLCODE -874, Error: THE ENCODING SCHEME SPECIFIED FOR THE CONTAINING TABLE SPACE OR OTHER PARAMETERS
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
SQLCODE -843, Error: THE SET CONNECTION OR RELEASE STATEMENT MUST SPECIFY AN EXISTING CONNECTION SQLCODE SQLCODE SQLCODE ADDRESS -842, Error: A CONNECTION TO x ALREADY EXISTS -840, Error: TOO MANY ITEMS RETURNED IN A SELECT OR INSERT LIST -822, Error: THE SQLDA CONTAINS AN INVALID DATA ADDRESS OR INDICATOR VARIABLE CONTAINS A VALUE
SQLCODE -820, Error: THE SQL STATEMENT CANNOT BE PROCESSED BECAUSE THAT IS NOT VALID IN THIS RELEASE
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 SQLCODE SQLCODE -808, Error: THE CONNECT STATEMENT IS NOT CONSISTENT WITH THE FIRST CONNECT -807, Error: ACCESS DENIED: PACKAGE -805, Error: DBRM OR PACKAGE NAME IS NOT ENABLED FOR ACCESS FROM
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
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
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 SQLCODE -742, Error: DSNDB07 IS THE IMPLICIT WORK FILE DATABASE -741, Error: A DATABASE IS ALREADY DEFINED FOR MEMBER IS DEFINED WITH THE OPTION MODIFIES SQL DATA WHICH IS
SQLCODE -740, Error: FUNCTION NOT VALID IN THE CONTEXT IN WHICH IT WAS INVOKED
SQLCODE -739, Error: ALTER FUNCTION THEY ARE PROCESSED IN PARALLEL SQLCODE SQLCODE SQLCODE DATABASE
-737, Error: IMPLICIT TABLE SPACE NOT ALLOWED -736, Error: INVALID OBID -735, Error: DATABASE SPECIFIED
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 IS NOT ALLOWED IN DB2 PRIVATE PROTOCOL PROCESSING THERE ARE ENABLE
66
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 CONTOKEN = ''X IS NOT UNIQUE SO IT WITH VERSION = BUT
SQLCODE -720, Error: BIND ERROR, ATTEMPTING TO REPLACE PACKAGE = THIS VERSION ALREADY EXISTS SQLCODE SQLCODE -719, Error: BIND ADD ERROR USING -718, Error: REBIND OF PACKAGE AUTHORITY PACKAGE
SQLCODE -717, Error: FOR WITH MARK FAILED BECAUSE RELEASE FROM WHICH FALLBACK HAS OCCURRED SQLCODE -716, Error: PROGRAM
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 SQLCODE EXIST SQLCODE SQLCODE REASON SQLCODE SQLCODE SQLCODE -693, Error: THE COLUMN IN DDL REGISTRATION TABLE OR INDEX IS NOT DEFINED DOES NOT
-690, Error: THE STATEMENT IS REJECTED BY DATA DEFINITION CONTROL SUPPORT. -689, Error: TOO MANY COLUMNS DEFINED FOR A DEPENDENT TABLE -688, Error: INCORRECT DATA RETURNED FROM FIELD PROCEDURE, , -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 SQLCODE SQLCODE PROCEDURE SQLCODE -685, Error: INVALID FIELD TYPE, -684, Error: THE LENGTH OF LITERAL LIST BEGINNING 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
-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 SQLCODE SQLCODE -677, Error: INSUFFICIENT VIRTUAL STORAGE FOR BUFFERPOOL EXPANSION -676, Error: ONLY A 4K PAGE BUFFERPOOL CAN BE USED FOR AN INDEX -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 SQLCODE -666, Error: CANNOT BE EXECUTED BECAUSE IS IN PROGRESS
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 BECAUSE THE
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
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 SQLCODE SQLCODE SQLCODE SQLCODE ACTIVATED IS NOT AVAILABLE BECAUSE ITS
-652, Error: VIOLATION OF INSTALLATION DEFINED EDIT OR VALIDATION PROCEDURE -651, Error: TABLE DESCRIPTION EXCEEDS MAXIMUM SIZE OF OBJECT DESCRIPTOR -650, Error: THE ALTER INDEX CANNOT BE EXECUTED, REASON -647, Error: BUFFERPOOL CANNOT BE SPECIFIED BECAUSE IT HAS NOT BEEN BECAUSE IT
68
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 SQLCODE -638, Error: TABLE CANNOT BE CREATED BECAUSE COLUMN DEFINITION IS MISSING KEYWORD ARE NOT SPECIFIED IN
SQLCODE -636, Error: THE PARTITIONING KEYS FOR PARTITION ASCENDING OR DESCENDING ORDER SQLCODE SQLCODE SQLCODE
-635, Error: THE DELETE RULES CANNOT BE DIFFERENT OR CANNOT BE SET NULL -634, Error: THE DELETE RULE MUST NOT BE CASCADE -633, Error: THE DELETE RULE MUST BE BECAUSE OF DELETE
SQLCODE -632, Error: THE TABLE CANNOT BE DEFINED AS A DEPENDENT OF RULE RESTRICTIONS SQLCODE SQLCODE -631, Error: FOREIGN KEY
-630, Error: THE WHERE NOT NULL SPECIFICATION IS INVALID FOR TYPE 1 INDEXES CANNOT CONTAIN
SQLCODE -629, Error: SET NULL CANNOT BE SPECIFIED BECAUSE FOREIGN KEY NULL VALUES SQLCODE -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 SQLCODE SQLCODE SQLCODE IS NO SQLCODE SQLCODE DATABASE SQLCODE STOPPED SQLCODE SQLCODE SQLCODE SQLCODE -624, Error: TABLE DOES NOT HAVE AN INDEX TO ENFORCE THE UNIQUENESS OF THE ALREADY HAS A PRIMARY KEY
-623, Error: A CLUSTERING INDEX ALREADY EXISTS ON TABLE -622, Error: FOR MIXED DATA IS INVALID BECAUSE THE MIXED DATA INSTALL OPTION -621, Error: DUPLICATE DBID -620, Error: KEYWORD IN WAS DETECTED AND PREVIOUSLY ASSIGNED TO SPACE IN THE
-619, Error: OPERATION DISALLOWED BECAUSE THE WORK FILE DATABASE IS NOT -618, Error: OPERATION IS NOT ALLOWED ON SYSTEM DATABASES
-617, Error: A TYPE 1 INDEX IS NOT VALID FOR TABLE -616, Error: CANNOT BE DROPPED BECAUSE IT IS REFERENCED BY -615, Error: IS NOT ALLOWED ON A PACKAGE IN USE
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
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 SQLCODE -594, Error: ATTEMPT TO CREATE A NULLABLE ROWID OR DISTINCT TYPE COLUMN -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 SQLCODE SQLCODE SQLCODE SQLCODE SQLCODE -573, Error: TABLE DOES NOT HAVE A UNIQUE KEY WITH THE SPECIFIED COLUMN
-571, Error: THE STATEMENT WOULD RESULT IN A MULTIPLE SITE UPDATE -567, Error: AUTHORIZATION ERROR USING AUTHORITY PACKAGE = PRIVILEGE =
-559, Error: ALL AUTHORIZATION FUNCTIONS HAVE BEEN DISABLED -558, Error: INVALID CLAUSE OR COMBINATION OF CLAUSES ON A GRANT OR REVOKE -557, Error: INCONSISTENT GRANT/REVOKE KEYWORD . PERMITTED KEYWORDS ARE BECAUSE THE REVOKEE DOES
SQLCODE -556, Error: CANNOT HAVE THE PRIVILEGE REVOKED BY NOT POSSESS THE PRIVILEGE OR THE REVOKER DID NOT MAKE THE GRANT SQLCODE SQLCODE
-555, Error: AN AUTHORIZATION ID CANNOT REVOKE A PRIVILEGE FROM ITSELF -554, Error: AN AUTHORIZATION ID CANNOT GRANT A PRIVILEGE TO ITSELF
70
SPECIFIED IS NOT ONE OF THE VALID AUTHORIZATION IDS DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION ON OBJECT
SQLCODE -549, Error: THE STATEMENT IS NOT ALLOWED FOR DYNAMICRULES(RUN) IS NOT IN EFFECT FOR SQLCODE SQLCODE
-548, Error: A CHECK CONSTRAINT THAT IS DEFINED WITH -546, Error: THE CHECK CONSTRAINT 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 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 SQLCODE SQLCODE SQLCODE CAN BE AFFECTED
-534, Error: THE PRIMARY KEY CANNOT BE UPDATED BECAUSE OF MULTIPLE-ROW UPDATE -533, Error: INVALID MULTIPLE-ROW INSERT -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 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 SQLCODE SQLCODE -516, Error: THE DESCRIBE FOR STATIC STATEMENT DOES NOT IDENTIFY A PREPARED -514, Error: THE CURSOR -513, Error: THE ALIAS IS NOT IN A PREPARED STATE MUST NOT BE DEFINED ON ANOTHER LOCAL OR REMOTE ALIAS
71
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 SQLCODE SQLCODE DESTROYED -502, Error: THE CURSOR IDENTIFIED IN AN OPEN STATEMENT IS ALREADY OPEN -501, Error: THE CURSOR IDENTIFIED IN A FETCH OR CLOSE STATEMENT IS NOT OPEN -500, Error: THE IDENTIFIED CURSOR WAS CLOSED WHEN THE CONNECTION WAS 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 SQLCODE SQLCODE -482, Error: THE PROCEDURE -480, Error: THE PROCEDURE STATEMENT, THE NUMBER OF PARAMETERS DOES
RETURNED NO LOCATORS HAS NOT YET BEEN CALLED CANNOT BE PROCESSED BECAUSE
SQLCODE -478, Error: DROP OR REVOKE ON OBJECT TYPE OBJECT OF TYPE IS DEPENDENT ON IT
72
SQLCODE -473, Error: A USER DEFINED DATA TYPE CANNOT BE CALLED THE SAME NAME AS A SYSTEM PREDEFINED TYPE (BUILT-IN TYPE) SQLCODE SQLCODE -472, Error: CURSOR WAS LEFT OPEN BY EXTERNAL FUNCTION (SPECIFIC NAME )
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 (SPECIFIC NAME ) HAS RETURNED AN INVALID CANNOT BE CAST TO TYPE BY SIGNATURE, A MATCHING FUNCTION SINCE IT IS
SQLCODE -463, Error: EXTERNAL FUNCTION SQLSTATE , WITH DIAGNOSTIC TEXT SQLCODE
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
ALREADY EXISTS IN
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 (SPECIFIC NAME ) HAS RETURNED AN ERROR CONTAINS AN
SQLCODE -443, Error: EXTERNAL FUNCTION SQLSTATE WITH DIAGNOSTIC TEXT SQLCODE
-441, Error: INVALID USE OF 'DISTINCT' OR 'ALL' WITH SCALAR FUNCTION BY THE NAME HAVING COMPATIBLE ARGUMENTS WAS FOUND IN THE
-438, Error: APPLICATION RAISED ERROR WITH DIAGNOSTIC TEXT: IS SPECIFIED IN THE FUNCTION RAISE_ERROR OR
73
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 SQLCODE SQLCODE -414, Error: A LIKE PREDICATE IS INVALID BECAUSE THE FIRST OPERAND IS NOT A -413, Error: OVERFLOW OCCURRED DURING NUMERIC DATA TYPE CONVERSION -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 SQLCODE SQLCODE -410, Error: THE FLOATING POINT LITERAL CONTAINS MORE THAN 30 CHARACTERS
-409, Error: INVALID OPERAND OF A COUNT FUNCTION -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 IS APPLIED TO CHARACTER OR
SQLCODE -401, Error: THE OPERANDS OF AN ARITHMETIC OR COMPARISON OPERATION ARE NOT COMPARABLE SQLCODE SQLCODE -400, Error: THE CATALOG HAS THE MAXIMUM NUMBER OF USER DEFINED INDEXES -399, Error: ATTEMPTED TO INSERT AN INVALID VALUE INTO A ROWID COLUMN BUT THE
SQLCODE -398, Error: A LOCATOR WAS REQUESTED FOR HOST VARIABLE NUMBER VARIABLE IS NOT A LOB
74
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 SQLCODE SQLCODE SQLCODE -373, Error: DEFAULT CANNOT BE SPECIFIED FOR IDENTITY COLUMN -372, Error: ONLY ONE ROWID OR IDENTITY COLUMN IS ALLOWED IN A TABLE -359, Error: THE RANGE OF VALUES FOR THE IDENTITY COLUMN IS EXHAUSTED -355, Error: A LOB COLUMN IS TOO LARGE TO BE LOGGED OF THE OF THE
SQLCODE -352, Error: AN UNSUPPORTED SQLTYPE WAS ENCOUNTERED IN POSITION INPUT-LIST SQLCODE -351, Error: AN UNSUPPORTED SQLTYPE WAS ENCOUNTERED IN POSITION SELECT-LIST 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
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
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 IS NOT VALID
CANNOT BE
IS NOT NUL-
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 SPECIFIED IN A SET LOCALE OR OTHER STATEMENT THAT IS IS INCOMPLETE.
SQLCODE -229, Error: THE LOCALE LOCALE SENSITIVE WAS NOT FOUND
SQLCODE -221, Error: "SET OF OPTIONAL COLUMNS" IN EXPLANATION TABLE OPTIONAL COLUMN IS MISSING SQLCODE SQLCODE -220, Error: THE COLUMN IN EXPLANATION TABLE
SQLCODE -214, Error: AN EXPRESSION STARTING WITH REASON CODE = SQLCODE -212, Error: TRIGGER DEFINITION
IN THE
SQLCODE -208, Error: THE ORDER BY CLAUSE IS INVALID BECAUSE COLUMN THE RESULT TABLE
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 SQLCODE SQLCODE SQLCODE -205, Error: -204, Error: IS NOT A COLUMN OF TABLE IS AN UNDEFINED NAME 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 IN TABLE ARE NOT COMPATIBLE WITH THE
SQLCODE -190, Error: ATTRIBUTES OF COLUMN EXISTING COLUMN SQLCODE SQLCODE -189, Error: CCSID
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
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 SQLCODE SQLCODE SQLCODE -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-171, Error: THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT -170, Error: THE NUMBER OF ARGUMENTS SPECIFIED FOR -164, Error: OF IS INVALID
IS INVALID
SQLCODE -161, Error: THE INSERT OR UPDATE IS NOT ALLOWED BECAUSE A RESULTING ROW DOES NOT SATISFY THE VIEW DEFINITION SQLCODE SQLCODE -160, Error: THE WITH CHECK OPTION CANNOT BE USED FOR THE SPECIFIED VIEW -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 -156, Error: THE STATEMENT DOES NOT IDENTIFY A TABLE -154, Error: THE STATEMENT IS INVALID BECAUSE THE VIEW OR TABLE DEFINITION IS 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 SQLCODE SQLCODE -148, Error: THE SOURCE TABLE -147, Error: ALTER FUNCTION CANNOT BE RENAMED OR ALTERED FAILED BECAUSE SOURCE FUNCTIONS CANNOT BE
-144, Error: INVALID SECTION NUMBER -142, Error: THE SQL STATEMENT IS NOT SUPPORTED
77
-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 SQLCODE -132, Error: AN OPERAND OF x IS NOT VALID -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 SQLCODE SQLCODE SQLCODE BY CLAUSE -129, Error: THE STATEMENT CONTAINS TOO MANY TABLE NAMES -128, Error: INVALID USE OF NULL IN A PREDICATE -127, Error: DISTINCT IS SPECIFIED MORE THAN ONCE IN A SUBSELECT -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 SQLCODE SQLCODE SQLCODE SQLCODE SQLCODE -114, Error: THE LOCATION NAME DOES NOT MATCH THE CURRENT SERVER IS
-113, Error: INVALID CHARACTER FOUND IN: . REASON CODE -112, Error: THE OPERAND OF A COLUMN FUNCTION IS ANOTHER COLUMN FUNCTION -111, Error: A COLUMN FUNCTION DOES NOT INCLUDE A COLUMN NAME -110, Error: INVALID HEXADECIMAL LITERAL BEGINNING
78
-105, Error: INVALID STRING -104, Error: ILLEGAL SYMBOL "". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: -103, Error: 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 MUST BE
SQLCODE -079, Error: QUALIFIER FOR DECLARED GLOBAL TEMPORARY TABLE OR INDEX SESSION, NOT SQLCODE SQLCODE SQLCODE SQLCODE SQLCODE SQLCODE REFERENCE SQLCODE -060, Error: INVALID SPECIFICATION :
-029, Error: INTO CLAUSE REQUIRED -010, Error: THE STRING CONSTANT BEGINNING IS NOT TERMINATED
-007, Error: STATEMENT CONTAINS THE ILLEGAL CHARACTER 000,SUCCESSFUL EXECUTION 012, Warning: THE UNQUALIFIED COLUMN NAME WAS INTERPRETED AS A CORRELATED
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 WAS RESOLVED USING A NON-UNIQUE OR
SQLCODE 203, Warning: THE QUALIFIED COLUMN NAME UNEXPOSED NAME SQLCODE 204, Warning: 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 SQLCODE SQLCODE SQLCODE 218, Warning: THE SQL STATEMENT REFERENCING A REMOTE OBJECT CANNOT BE 219, Warning: THE REQUIRED EXPLANATION TABLE 220, Warning: THE COLUMN IN EXPLANATION TABLE DOES NOT EXIST IS NOT DEFINED PROPERLY ARE REQUIRED FOR COLUMNS
SQLCODE 237, Warning: SQLDA INCLUDES LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A DISTINCT TYPE
79
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 SQLCODE SQLCODE 402, Warning: LOCATION IS UNKNOWN
403, Warning: THE LOCAL OBJECT REFERENCED BY THE CREATE ALIAS STATEMENT DOES 434, Warning: OPTION 445, Warning: VALUE IS A DEPRECATED FEATURE HAS BEEN TRUNCATED (SPECIFIC NAME ) HAS RETURNED A
SQLCODE 462, Warning: EXTERNAL FUNCTION OR PROCEDURE WARNING SQLSTATE, WITH DIAGNOSTIC TEXT SQLCODE 464, Warning: PROCEDURE DEFINED LIMIT SQLCODE SQLCODE 466, Warning: PROCEDURE RETURNED RETURNED
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 SQLCODE SQLCODE SQLCODE 551, Warning: 552, Warning: HAS BEEN IGNORED BECAUSE ON OBJECT
DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION
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 SQLCODE 610, Warning: A CREATE/ALTER ON OBJECT 625, Warning: THE DEFINITION OF TABLE HAS PLACED OBJECT IN PENDING
80
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 IN PARTITIONED TABLE SPACE IS NOT AVAILABLE BECAUSE ITS
SQLCODE 653, Warning: TABLE PARTITIONED INDEX HAS NOT BEEN CREATED
SQLCODE 655, Warning: STOGROUP WILL NOT BE ALLOWED IN FUTURE RELEASES. SQLCODE
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 SQLCODE 807, Warning: THE RESULT OF DECIMAL MULTIPLICATION MAY CAUSE OVERFLOW 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
-117
-118
82
-134
-153 -154 -155 -156 -158 -159 -160 -161 -164 -180
-181
-198 -199
-203 -204
-205 -206
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 OPERACIN 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
-303
-304 -305
-402
-404
-405
-409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -421 -501 -502 -503 -504 -507 -508
-509 -510
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 OPERACIN 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 OPERACIN. EN UNA OPERACIN 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
-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
-660
-661
-665
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 SELECCIN 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 OPERACIN .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 OPERACIN. 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 OPERACIN (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 OPERACIN (PARAMETRO1) NO ESTA PERMITIDA EN EL SISTEMA DE BASES DE DATOS. OPERACIN 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
-679
-680 -681
-682 -683 -684 -685 -686 -687 -688 -802 -803 -804
-805
-818
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 TAMAO 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 DEFINICIN 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
-905
-913
-922
-923
-1010
EN SDSF. DA EN LA TAREA T005MSTR. (REASON CODE 00C90089). ALGO NO DISPONIBLE SE LLAMO A TECNICA DE SISTEMAS Y HABIA UN DISCO DAADO. (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 LIBRERA. 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 APLICACIN 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. CONEXIN 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 CONEXIN 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 CONEXIN 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
-1013 -1034
-1045
(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
88
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
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
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
92
ANEXO 4.2 DAPROCBATCH. La tabla DAPROCBATCH guarda informacin sobre los ficheros de salida de cada proceso susceptible de ser reposicionado. Debe darse de alta en esta tabla una lnea 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:
93
ANEXO 4.3. INCLUDES Y COPYS. A continuacin 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 estndar para ser utilizados por el programa de aplicacin. Se encuentran en la librera: 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 informacin necesaria para el mismo. En RURCOMM deja informacin acerca del nmero de commit por el que vamos, nombre del plan, el nmero de registros que se pasa en el JCL por los que hace COMMIT e informacin sobre los ficheros de salida como el nombre de la ddname, el blocaje, el tipo de dispositivo, nmero de registros por pista, etc. En RUROPER hay informacin 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)
94
URSWITCH. Copy que contiene " switches " generales utilizados por los programas de aplicacin generados por arquitectura, y un switch especfico 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
SOLO PARA PROGRAMAS QUE UTILIZEN FICHERO SECUENCIAL DE ENTRADA. SW-RELANZAMIENTO 88 SI-RELANZAMIENTO 88 NO-RELANZAMIENTO PIC X. VALUE 'S'. VALUE 'N'.
URWORK Copy que contiene campos de trabajo estndar especficos 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
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 *****************************************************************
97
ANEXO 4.4 FUNCIONES. XX_CANCELACION_PROCESOS_BATCH. Se utiliza en los procesos Batch para cancelar la ejecucin de un programa por cualquier tipo de error. Utiliza los siguientes parmetros:
98
ANEXO 4.5. JCL REPOSICIONAMIENTO CLEARCOM Esta utilidad se ejecuta antes de los programas de aplicacin para comprobar el estado del proceso y lo prepararlo para su ejecucin desde el principio o para su reposicionamiento. Realiza las siguientes funciones: 1. Comprobacin del estado del proceso y el nmero de confirmaciones realizadas. Para ello consulta la tabla DAREPOS. - Si no encuentra el registro correspondiente al plan/proceso considera que es la primera ejecucin. - Si el proceso se encuentra en un estado distinto del inicial (P) o el intermedio (C), devuelve un mensaje de aviso, pero acaba con cdigo de retorno 0. 2. Consulta la tabla DAPROCBATCH. Para saber cual es la DDNAME de los ficheros de salida alocados dinmicamente 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 ejecucin 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
//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
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
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
102
ANEXO-SORT
ORDENACIN BSICA
103
ORDENACIN PARCIAL
104
COPIA DE UN FICHERO
105
106
107
ELIMINAR REPETIDOS
108
ACUMULAR
OPERADORES Y TIPOS DE DATOS - Para hacer referencia a los tipos de datos segn su origen, se utilizan los siguiente operadores: o PZ: PIC 9() Numrico display o PD: PIC 9() COMP-3 Numrico empaquetado o BI: PIC 9() COMP Numrico binario o CH: PIC x() Alfanumrico - Para las comparacin de mayor, menor, etc; se utilizaran los siguientes operadores: o GT: Mayor que o EQ: Igual o LT: Menor que
109
110
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
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 its the first time youre 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
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 ****************************
114
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 companys accounting information, c by the proper testing class, and m by the proper held print class used in testing
115
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 its JCL youre 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 TUTOR END 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
116
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-
? 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
117
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
118
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.
119
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
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 ****************************
120
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 ****************************
121
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 ****************************
122
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 ****************************
123
124
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 1. 3277 2. Std 3. Max 4. Part 3. 3278 4. 3278A
2. 3277A
125
Rafael Campillo Lorenzo. 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:
SYSOUT class . . Local printer ID writer-name . . Lines per page . Primary pages . Secondary pages Log Message ID .
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 Cceres 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 2. Std
Rafael Campillo Lorenzo. Print Graphics Family printer type 2 Device name . . . . Aspect ratio . . . 0 General Input field pad . . Command delimiter . ;
3. Max
2. 3277A
127
Rafael Campillo Lorenzo. 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 ***
SYSOUT class . . Local printer ID writer-name . . Lines per page . Primary pages . Secondary pages *** List already
128
129
Software Factory Cceres Data Set Name . . . Volume Serial . . . Workstation File: File Name . . . . . Initial Macro . . Profile Name . . . Format Name . . . Data Set Password . . . . . . . . (If not cataloged)
130
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
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 ejecucin 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 violacin de ??, existe porque se intento sobreescribir un registro en el archivo y el registro no es del mismo tamao 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 vlido debido a que la sentencia start no se ejecut con xito, la sentencia READ precedente fue insatisfactoria o causa una condicin AT END. CPF5001, CPF5025, CPF5183 47 La ejecucin de una sentencia READ o START fuen intentada sobre un archivo que no est abierto en el modo INPUT o I-O. 48 La ejecucin de una sentencia WRITE fue intentada sobre un archivo que no est abierto en el modo I-O, OUTPUT o EXTEND. 49 La ejecucin 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 genricamente : 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 excepcin y la opcin 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 lgico: Archivo bloqueado El archivo ya est abierto I-O para un archivo cerrado READ despus de fin de archivo CLOSE para un archivo ya cerrado CPF4106, CPF4132, CPF4740, CPF5013, CPF5067, CPF5070, CPF5119, CPF5145, CPF5146, CPF5149, CPF5176, CPF5209
133
93 El archivo esta en conflicto con otro usuario. 94 ??? y la ltima operacin no fue un READ satisfactorio. 95 Informacin del archivo invlido 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 errr interno en la estructura del fichero, generalmente se suelen provocar cuando hay un corte elctrico o una salida brusca del programa y algn 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 fsico del disco, en ese caso tambin ser conveniente copiarlo en otro sitio "fsico" 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 operacin de entrada READ desde dispositivo de programa 9 C Falla de adquisicin, la seccin no ha partido o conectado. 9 D El registro est bloqueado CPF5027, CPF5032 9 G Excepcin de salida para dispositivo o sesin 9 H Operacin ACQUIRE fallida. ? Apropiado por otro programa o inhabilitado. (9H es el resultado cuando una operacin ACQUIRE causa cualquiera de las excepciones monitoreadas para 90 o 9N cuando ocurre. 9 I Operacin WRITE fallida CPF4702, CPF4737, CPF5052, CPF5076 9 K Nombre de formato invlido, 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 sesin 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
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 .
Aparece la siguiente ventana. En ella, donde pone PASSWORD ponemos nuestra contrasea y pulsamos CONTROL.
135
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
137
En el vamos a poner la opcin 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 funcin que ms se utilizan en los mens 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 funcin 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 lnea de la ventana que queremos visualizar y pulsando CONTROL. Notar que un * delante de una lnea de ventana activa indica que esa es la ventana que actualmente estamos visualizando.
(( PONER AQUI VENTANA F9))) F10 F11 Ver el contenido de la izquierda de la ventana. Ver el contenido de la derecha de la ventana.
Muestra las asignaciones de las teclas de funcin 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 travs 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 opcin la X y CONTROL. Debemos cerrar todas las ventanas de sesin que hayamos abierto.
KEYS
(((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 opcin 2 y pulsaremos CONTROL))).
139
A travs del men de edicin podemos crear o editar un archivo para programar el cdigo COBOL en l. Accedemos a travs de la opcin 2 desde el men general de desarrollo.
En la ventana que aparece, el panel de entrada del editor indicaremos la librera en la que vamos a trabajar. Una librera es la direccin donde se van a almacenar los archivos y se compone de distintos campos seguidos por un . . Si vamos a trabajar por ejemplo en la librera 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 vaco. Pulsamos CONTROL.
140
NOTA: En el caso de que el nombre de la librera sea demasiado largo y no podamos ponerlo en proyect, group y type al editar, podemos borrar lo que contengan esas cuatro lneas y ponerlo en la lnea de data set name con el nombre del documento entre parntesis. Para editar el programa del ejemplo se pondr en esa lnea: DES.ISWF.TRABAJO.INS.FTE(NOMBRE_DEL_ARCHIVO) Ahora tenemos abierto el editor.
141
Lnea
de
Numeracin
de
Teclas
de
Vamos a ver como podemos utilizarlo. Existen tres formas de dar instrucciones al editor: La numeracin de las lneas. Las opciones de escritura del texto vamos a indicarlas a travs de la insercin de una serie de caracteres y nmeros en la posicin que queramos del editor dentro de la numeracin de lneas. As, si en esa columna, en una fila determinada ponemos por ejemplo una I, se insertar una lnea debajo de esa fila donde podremos continuar escribiendo. Las opciones ms habituales son: I In R Rn D Dn C M A B )) ))n Inserta una lnea debajo de la lnea donde hemos puesto la I. Inserta n lneas a continuacin de esta, siendo n el nmero de lneas. Repite el contenido de esta lnea en la lnea de debajo. Repite n veces esta lnea debajo, siendo n el nmero de lneas. Borra una lnea. Borra n lneas, siendo n el nmero de lneas. Copia esta lnea en el portapapeles. Mover esta lnea. La corta y la guarda en el portapapeles. Escribe la lnea o el bloque de lneas que hayamos copiado o movido debajo de sta. Escribe la lnea o el bloque de lneas que hayamos copiado o movido encima de sta. Mueve un espacio hacia la derecha el texto de esta lnea. Mueve n espacios hacia la derecha el texto de esta lnea.
142
(( ((n
Mueve un espacio hacia la izquierda el texto de esta lnea. Mueve n espacios hacia la izquierda el texto de esta lnea.
Para bloques de texto se coloca dos caracteres indicativos de lo que queremos hacer en la primera lnea del bloque y esos mismos caracteres en la ltima lnea del bloque de texto. Por ejemplo: Borrar en bloque: Ponemos DD en la primera lnea y DD en la ltima lnea del bloque y al pulsar CONTROL se eliminar todo el contenido que haya entre ambas lneas. Copiar en bloque: Ponemos CC en la primera lnea del bloque y CC en la ltima. Escribimos una A (after) o una B (befote) en la posicin donde queremos copiar el bloque de texto dependiendo si queremos que se copie a continuacin de esa lnea 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 lnea del bloque. Desplazar a la izquierda o derecha un bloque de texto: Se pone ))n en la primera lnea del bloque y ))n en la ltima lnea 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 posicin del cursor (el nmero de fila y el nmero de columna en la que se encuentra), pero esta posicin no es la posicin COBOL, por lo que debemos conocer la posicin COBOL para no tener errores de sintaxis a la hora de realizar la compilacin. Por ejemplo: Los 01 van en la posicin COBOL 8. Los 05 en la posicin cobol 12, igual que los niveles 88. Los 10 van en la posicin cobol 16. Los 03 van en la posicin cobol de los 05 desplazando todo a la posicin del siguiente (el 05 pasara a la posicin del 10, ...) Los comentarios (*) comienzan en la posicin cobol 7. Los exec comienzan en la posicion COBOL 12. Para poder visualizar la posicin COBOL, el editor nos muestra la regla para COBOL si ponemos COLS en la numeracin de una lnea.
143
La lnea de mandatos. En la lnea de mandatos vamos a indicar las operaciones que queremos realizar con este fichero o entre varios ficheros. Las que ms utilizamos son: Guardar el contenido del documento. Buscar un texto en el documento. Utilizando la tecla de funcin F5 continuar buscando el mismo texto a travs del documento. CUT Copia al portapapeles un texto seleccionado mediante cc a travs de la numeracin de lneas para poder llevarlo posteriormente a otro documento. PASTE Pega un texto copiado mediante CUT en la posicin de la lnea indicada mediante una A o una B en la numeracin de lnea. L nmero_de_lnea Posiciona el cursor en la lnea del documento indicada por nmero de lnea. CREATE Sale de la ventana de edicin y muestra la ventana de libreras para indicar la librera y el nombre de programa con el que queremos crear el nuevo. El fichero nuevo se creara con todos las lneas indicadas mediante Cn en la numeracin de lnea y desde la posicin en la que hayamos puesto la Cn. RES Quita los avisos que aparecen en las lneas 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 lnea de comandos y pulsamos la tecla de funcin F8, el cursor se mueve hasta la ltima lnea escrita que exista en el documento. M(F7) Si escribimos una M en la lnea de comandos y pulsamos la tecla de funcin F7, el cursor se mueve hasta la primera lnea escrita que contenga el documento. NUM STD ON COBOL-> Con este comando estandarizamos la ventana de edicin de cdigo para COBOL, eliminando las primeras 6 columnas que estn a continuacin de la columna de numeracin. Si ahora ponemos COLS, la numeracin de COLS sera la misma que las posiciones indicadas por el cursor en la parte inferior izquierda de la pantalla. Esta opcin no es recomendable cuando tengamos escrito texto a continuacin de la numeracin 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 lnea que queremos copiar y CC en la ltima lnea del bloque a copiar. c) En la lnea de comandos ponemos CUT. d) Nos vamos al documento destino y en la lnea anterior a la posicin donde queremos poner el bloque de texto escribimos una A. e) Ponemos en la lnea de comando PASTE. SAVE F texto
144
2. Crear un documento con la misma informacin de otro. a) Abrimos una ventana del editor con el documento desde el que queremos copiar. b) En la primera lnea del documento ponemos C9999. c) En la lnea de comandos ponemos CREATE. d) Sale de la ventana del editor y aparece una ventana de guardado en la que indicamos la informacin de la librera 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 vaco. Las teclas de Funcin. Las que ms se utilizan: F3 F5 F7 F8 F9 F10 F11 Salir del editor. Guarda el documento cuando sale. Si se ha indicado en la lnea de comando F texto_a_buscar, permite seguir buscando el texto a travs del documento. Muestra la pantalla siguiente de contenido del documento. Muestra la pantalla anterior de contenido del documento. Abre el men que permite pasar de una abierta a otra o abrir una nueva ventana. Muestra el texto de la parte derecha de la pantalla. Muestra el texto de la parte izquierda de la pantalla si lo hay.
NOTA: Siempre que pongamos una orden en una lnea o un comando debemos pulsar control para que se ejecute o borrarla si queremos cancelarla.
145
1.6 MEN DE MANEJO DE LIBRERIAS. A travs de la opcin 3 desde el Men general de desarrollo entramos en el men de seleccin de utilidades.
146
A travs de ella podemos acceder a las distintas libreras y archivos, permitindonos abrir los documentos en modo de edicin y visualizacin o realizar copias de archivos desde una librera a otra sin necesidad de abrirlos. Para ello indicamos la librera principal y a travs de ella podremos ir entrando en las que contiene. Por ejemplo, si queremos entrar a ver los documentos que contiene la librera DES.ISWF.TRABAJO.SWF.FTE, podemos poner lo siguiente: En Cualificador 1: DES En Cualificador 2: ISWF En Resto: TRABAJO.INS.FTE
147
Pulsamos CONTROL y en la ventana que aparece (DATA SET LIST UTILITY) volvemos a pulsar CONTROL.
148
Nos muestra la librera DES.ISWF.TRABAJO.INS cerrada. Para poder ver su contenido vamos a poner una V delante del nombre de la librera (en la columna de COMMAND) y pulsamos CONTROL.
En el caso de que queramos editar alguno de ellos, pondremos una E delante de la lnea 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 mostrndonos el contenido del documento. Copiar un archivo. Si lo que queremos es copiarlo a otra librera, entonces pondremos una C delante y pulsaremos CONTROL.
149
Nos mostrar una nueva ventana, el panel de entrada de copia, en el que en CURRENT FROM DATA SET aparece la librera y el programa fuente que queremos copiar y a continuacin nos aparecen tres lneas en las que vamos a especificar la librera destino: Por ej. supongamos que la librera destino es DES.ISWF.TRABAJO.SWF.FTE. En la seccin TO LIBRARY pondremos: En Proyect: DES.ISWF En Group: TRABAJO En Type: SWF.FTE Si el fichero ya existe en esa librera 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 librera 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 travs del men de seleccin de utilidades si existe el nuevo archivo en la librera donde lo hemos copiado.
150
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 lnea 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 eliminacin. (((PONER PANTALLA DE ELIMINAR FICHERO)))
151
A travs de la opcin 3 desde el Men general de desarrollo entramos en el men de seleccin de utilidades.
152
A travs de ella podemos buscar cadenas de caracteres dentro de los ficheros existentes en una librera. Para ello, en la lnea de SEARCH STRING pondremos la cadena de caracteres a buscar entre comillas simples. En ISPF LIBRARI indicaremos la librera donde queremos buscar. Podemos indicar una librera que contenga a otras para encontrar as ms archivos. Por ejemplo, vamos a buscar la cadena BPBF en la librera 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 lnea de Data Set Name, lo borramos y Pulsamos CONTROL.
153
Esperamos un poco de tiempo. Aparecer un listado con el/los nombre/s de los fichero/s donde aparece la cadena y mostrar el prrafo 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 lnea de comandos del men general de desarrollo ponemos: TSO LIBRARI y pulsamos CONTROL.
154
Aparece una ventana llamada Consulta Mdulos 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 MDULO el nombre de la COPY o RUTINA (o el programa). Pulsamos CONTROL.
155
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 COMPILACIN. Cuando compilamos un programa o hacemos un bind desde la Arquitectura ISBAN, la informacin sobre la terminacin correcta o no y los archivos de compilacin y bind se muestran en la cola del spool. Esta cola se visualiza desde el ISPF, por lo que tenemos que verla a travs de TSOD. Para visualizar la cola, desde el men general de desarrollo accedemos al submen SDSF poniendo una S en la lnea de opciones y pulsando CONTROL.
156
Ponemos una H y pulsamos CONTROL. Entramos en la ventana que muestra las salidas mantenidas de SDSF, es decir la cola del spool.
157
Para poder visualizar la cola del spool referente a nuestra compilacin o bind, si no la vemos an, debemos indicar lo siguiente en la lnea 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 sesin de TSOD, entonces debemos de poner en nombre_usuario* el usuario de compilacin 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 compilacin estar al final de la cola. Si otra persona ha compilado con el mismo usuario, su compilacin tambin estar en esta cola, por lo que debemos comprobar que la los archivos de compilacin que estamos viendo sean los nuestra. Adems, si hemos realizado ms de una compilacin debemos ver tambin la hora de la compilacin para comprobar que sea la ltima realizada. Para hacer todas estas cosas, en la lnea de la compilacin que creemos es la nuestra debemos: -> Fijarnos en el nmero que aparece detrs del nombre de la compilacin. Si aparece un valor 12 o un valor 8 detrs del nombre de la compilacin indica error. Si aparece un 4 o un 24 indica errores warning y si aparece un 0 es que no hay ningn error. Estos son los valores ms usuales que aparecen, pero hay ms. Para ver si es nuestra compilacin y la hora: Delante del nombre de la compilacin 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 lnea ponemos S para que nos muestre la hora de compilacin. Si es nuestra compilacin y queremos ver los posibles errores que tengamos escribimos una ? delante de la lnea donde aparece el nombre de la compilacin y pulsamos CONTROL. Ahora nos muestra los archivos de nuestra compilacin. En el ltimo documento de la lista que tenga terminacin -out pondremos una S para que lo abra, escribiremos en la lnea de comandos M y pulsaremos F8 para que vaya al final del documento. Veremos en el final del documento los errores de compilacin que existan. Para modificar el cdigo del programa y solucionar los errores encontrados en la compilacin 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 compilacin, delante de la descripcin 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
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 travs del debugger, pero tambin 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 travs de la opcin 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 caractersticas del fichero. (Volvemos a la pantalla anterior si hemos pulsado CONTROL). Escribimos en la lnea de comandos una A (de allocate) y nos pedir que le indiquemos el nombre nuevo del fichero. Indicaremos el tamao de nuestro registro (normalmente el tamao 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 cambirselo) y nos aparece una nueva pantalla en la que podemos escribir el nombre nuevo, siempre indicando la librera y el nombre). 2. Utilizar alguno de los ficheros JCL existente: Hay un fichero llamado Allocate en la librera DES.DESILEH.FTE de creacin de ficheros. Modificar en el documento JCL el nombre del fichero (y si es necesario la librera) y el tamao del registro que utiliza el fichero en LRECL que queremos crear. Para que cree nuestro fichero de entrada en la lnea de comandos poner SUB. Seguir estos pasos para cada uno de los ficheros de entrada que tengamos y al finalizar ponemos CANCEL en la lnea de comandos y pulsamos CONTROL para salir sin modificar el archivo JCL.
1.11 ENTRADA DE REGISTROS EN FICHEROS CON DX Para poder almacenar informacin en los ficheros de entrada que hemos creado, vamos a editar primero el fichero de entrada que acabamos de crear (y por tanto estar vaco) y aadirle una lnea en blanco. Lo salvamos y salimos del editor. En la librera 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 insercin de datos en ficheros, DX, necesitamos las COPYS de todos los ficheros a los que vamos a aadir registro.
159
Vamos al men general de desarrollo y escribimos la opcin DX en la lnea 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 opcin 2 y aparece una ventana en la que vamos a rellenar los campos de informacin sobre el fichero al que vamos a aadir 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 librera 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 introduccin del registro con todos los campos de la COPY a la izquierda, el tipo de datos (C-alfanumrico, PS-comp3 y Pnumrico???) 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 lnea 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 instruccin CSR y CONTROL y luego pulsar F8. Si queremos introducir un nuevo registro, en comandos escribimos CHAR y nos muestra la ventana de edicin de fichero. En esta ventana se ve cada registro como una fila del fichero. Para insertar una nueva fila nos colocamos encima de la numeracin de la ltima lnea, 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 introduccin 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 travs de la seleccin con S del registro en la ventana de CHAR. La ventana de introduccin de registro se llama FMT, y poniendo FMT en comando cuando estamos en CHAR, nos vuelve a mostrar la ventana de introduccin de registro sin necesidad de seleccionar ninguno, con el que ya tenamos seleccionado. Hay otra opcin de visualizacin de ficheros, la opcin que muestra el fichero en Hexadecimal. Para poder visualizar el fichero de esta forma, escribiremos en la lnea de comandos la instruccin 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
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 adems debemos de ALLOCAR los ficheros antes de ejecutar el programa. Para entrar en IB, desde el men general de desarrollo escribimos en la lnea 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 asociacin de los ficheros que utilizamos en nuestro programa con el espacio fsico de los ficheros. Ver anexo. Entramos en la opcin 3 del IB (ALLOCATION) y despus en la opcin 2 (JCL) y en la ventana que aparece ponemos la librera donde esta el JCL de los ficheros y el nombre del JCL. Pulsamos CONTROL. Aparece una lnea con el nombre del JCL de ficheros. Delante de la lnea 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 lnea de comandos. En esa lnea: 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 librera 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 opcin 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 librera que utilizamos en el programa. Estas libreras van a depender del tipo de programa que usemos. Si no llama a rutinas tendr una librera llamada DES.GRXX.PGM con XX las dos primeras iniciales de nuestro programa. Si usamos rutinas tambin tendr que existir una librera 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 ejecucin completa. Antes de utilizarlo, miramos la teclas de funcin que tenemos
161
asignadas para el Debugger poniendo en la lnea de comandos la opcin KEYS y pulsando CONTROL. Vemos que teclas de funcin se utilizan para: STEP-> Sirve para ejecutar lnea a lnea 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 lnea que se va a ejecutar a continuacin aparece en blanco. A medida que vamos pasando de lnea, en la parte central de la pantalla aparecen los valores de las variables que vamos utilizando. Si antes de ejecutar la lnea cambiamos el valor actual de la variable por otro y pulsamos control, se ejecutar la lnea 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 lnea 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 modificacin. Volvemos a la ventana del debugger con F3. Si tenemos ficheros y queremos ver como su estado, podemos hacerlo desde la lnea de comandos de la ventana del debugger poniendo FILES y pulsando CONTROL. Si se haba hecho el allocate correctamente, en esta ventana veremos que la direccin fsica que aparece para cada fichero es donde realmente lo hemos creado. El fichero de salida tendr una direccin fsica temporal y despus se copiar a la direccin fsica que le hayamos indicado en el JCL de ficheros. Tambin 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 funcin definida para go o escribiendo go en la lnea de comandos del debugger. Pero tambin podemos poner breakpoints para hacer llegar la ejecucin hasta una lnea determinada. Para poder poner breakpoints debemos escribir en la lnea de comandos: AT numlinea. En la lnea indicada por num-linea aparecer en la parte izquierda una U y cuando hagamos un GO llegar a esa posicin 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 travs de la opcin 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
-> 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 librera 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 travs del JCL de ficheros, por lo que entraramos en la opcin 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 libreras van a depender del tipo de programa que usemos. Si no llama a rutinas tendr una librera llamada DES.GRXX.PGM con XX las dos primeras iniciales de nuestro programa. Si usamos rutinas tambien tendr que existir una librera 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 ratn en el botn Recibir Archivo (si nos fijamos en el icono del botn 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 librera y entre parntesis 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 parntesis). 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 botn recibir. ((ENVIAR CON TRANSFER???)))
163
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 compilacin y la contrasea 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 DISEO DE OBJETOS DE ARQUITECTURA
Desde el men de la arquitectura accedemos a la opcin 3, diseo de objetos arquitectura tecleando 3 y pulsando CONTROL. Desde el men de Diseo de objetos vamos a poder acceder a las opciones para dar de alta al programa y a su plan, adems 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 opcin programas poniendo como opcin la nmero 6 y pulsando CONTROL.
Escribimos los datos necesarios para dar de alta al programa: ENTORNO: Pondremos como entorno DE. MDULO: El mdulo es el nombre de nuestro programa. SUBAPLICACIN: Un cdigo que nos deben de dar y que indica la subaplicacin en la que se va a utilizar nuestro programa. INDICE VIGENCIA: Pondremos como ndice vigencia la letra V. CDIGO TCNICO: Las dos primeras letras de nuestro programa. Despus de asegurarnos que todos los campos han sido rellenados correctamente, pulsamos F6 para dar de alta.
164
En la pantalla que aparece terminamos de rellenar los datos necesarios para dar de alta al programa: ENTORNO, COD.TCNICO Y PROGRAMA: Tendrn los valores de la pantalla anterior. Si no fuese as pondramos lo mismo que en la pantalla anterior (entorno: de, Cod. Tcnico 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. SUBAPLICACIN: El cdigo 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 cdigos 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 EJECUCIN: El tipo de ejecucin de nuestro programa. Puede ser B (Batch), O (On-line) o M (Mixta, Batch y On-line). DESCRIPCION: Texto de ms de tres palabras que resume qu hace el programa. FUNCIONALIDAD: Ponemos como funcionalidad AP. El resto de campos se dejan como estn. Para confirmar el alta del programa, pulsamos la tecla de funcin F5. Si no ha habido ningn 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 opcin planes poniendo como opcin la nmero 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 subaplicacin 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
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 Tcnico, 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 adems 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 lnea con el nombre del plan y sus caractersticas. Delante de esa lnea 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 aadir una nueva rutina al plan debemos de pulsar la tecla F6. Se abre la ventana de aadir 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 aadir ms 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 compilacin del programa y el bind del programa y el plan los vamos a realizar a travs de la opcin 9 (Repositorio de objetos de arquitectura) que se encuentra dentro del men de la arquitectura. Escribimos como opcin la nmero 9 y pulsamos CONTROL. 2.3.1 Compilar el programa. Para compilar el programa debemos hacerlo a travs de la arquitectura y para corregir los errores de compilacin debemos hacerlo a travs 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 opcin 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 compilacin ponemos:
166
-> En ENTORNO ponemos DE si no esta puesto. -> En MDULO escribimos el nombre del programa que queremos compilar. Dejamos los demas campos vacos y pulsamos CONTROL. Nos aparece en esa pantalla una lnea con el nombre de nuestro programa y sus caractersticas. 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 librera donde se encuentra el cdigo del programa. (En nuestro caso, normalmente es DES.ISWF) -> En 2dos PUNTEROS ponemos la siguiente direccion de la librera 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 ejecucin, 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 opcin 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 estn y pulsamos CONTROL para confirmar el Bind.
167
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 quedara: SELECT * FROM DESADM.T_EJEMPLO; Una vez escrita la sentencia, pulsamos la tecla F2 para que la ejecute y nos muestre la informacin que contiene la tabla. 2.5 EL DEBUG DE PROGRAMAS ON-LINE (CICS). CICS ((TRANSACCIONES)). ANEXO1. COMPILACION Y EJECUCIN 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 librera 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
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, aadir 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 travs de la arquitectura y comprobamos despus a travs del debugger IBD si funciona. Como el programa llama a la rutina, probamos por tanto si funciona nuestra rutina.
169