MANUAL DE SUPERVIVENCIA Conceptos básicos para mis amigos Coboleros

Tamaño: px
Comenzar la demostración a partir de la página:

Download "MANUAL DE SUPERVIVENCIA Conceptos básicos para mis amigos Coboleros"

Transcripción

1 MANUAL DE SUPERVIVENCIA Conceptos básicos para mis amigos Coboleros Software Factory de CENIT INSA Rafael Campillo Lorenzo CÁCERES Año lectivo "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

2 ÍNDICE ÍNDICE DE FIGURAS MVS (Multiple Virtual Storage) ISPF (Interactive System Productivity Facility) CICS. (Customer Information Control System) Características de los programas bajo CICS. BATCH vs ON LINE La Arquitectura de Desarrollo SQL. DB2. cursores Cursores Documentación para las pruebas de las tablas DB2 utilizadas PROGRAMAS DE REARRANQUE Y reposicionamiento. ARQUITECTURA BATCH Funcionamiento del DB Rearranque de programas Ficheros dinámicos para salida Soporte Físico Concatenación de Ficheros Borrado de Ficheros de COMMIT Borrado Ficheros Ultimo Commit Ejemplos de JCL's Esqueletos Tratamiento a seguir por los programas de aplicación en base a un ejemplo real. Programa LQBBN JCL (JOB CONTROL LANGUAJE) Ficheros VTOC. Tabla de contenido del volumen Ficheros Particionados: PDS Formas de localizar un fichero. Catálogos Lenguaje de Control de Trabajos. Sintaxis Sentencia JOB MSGLEVEL(A,B) MSGCLASS CLASS NOTIFY TIME TYPRUN RESTART

3 REGION COND O IF/END/ELSE Sentencia DD DSN DISP UNIT VOL DCB SPACE DIR SYSOUT Sentencia EXEC Nombre del programa NOMBRE DEL PROCEDIMIENTO Acct Addrspc Cond Dprty Dynamnbr Parm Perform Rd Region time Utilidades de JCL IEHLIST IEBGENER IEBCOPY IEBCOMPR IEFBR DFSORT DFDSS Sentencias avanzadas JCL. CONCATENACIÓN DE FICHEROS REGLAS DE CONCATENACIÓN ANEXOS ANEXO A: Notas y apuntes sobre COBOL y codificación ANEXO 1: Listado de FILE STATUS ANEXO 2: Tutorial de los SQLCODES y sus causas

4 ANEXO 2.B SQLCODES EN CASTELLANO ANEXO 3: ABEND CODES bajo TSO / ISPF ANEXO 4: Utilidades y Objetos para el Reposicionamiento Batch ANEXO 4.1. DAREPOS ANEXO 4.2 DAPROCBATCH ANEXO 4.3. INCLUDES y COPYS URCOPYS URMENSA URSWITCH URSQLCOD URWORK URDCLGEN URCURSOR ANEXO 4.4 Funciones. XX_CANCELACION_PROCESOS_BATCH ANEXO 4.5. JCL REPOSICIONAMIENTO ANEXO 5. Enfrentamiento de ficheros ANEXO-SORT Ordenación básica Ordenación parcial Copia de un fichero Copia parcial de un fichero Ordenar y cambiar disposición de campos Eliminar repetidos Acumular Operadores y tipos de datos ANEXO 6. just enough ispf ANEXO 7- DESCRIPCION FILE STATUS EN ESPAÑOL ANEXO 8 -PROGRAMACION UTILIZANDO HOST Y ARQUITECTURA ISBAN ÍNDICE DE FIGURAS. Figura 1 - Subsistemas del OS Figura 2 - Arquitectura de desarrollo Figura 3 - Herramientas de la arquitectura de desarrollo Figura 4 - Herramientas de desarrollo ON-LINE Figura 5 - Campos de la tabla DAREPOS Figura 6 - Campos de la tabla DAPROCBATCH Figura 7 - Parámetros de la función XX_CANCELACION_PROCESOS_BATCH Figura 8 - SORT - Ordenacion básica Figura 9 - SORT - Ordenacion parcial Figura 10 - SORT - Copia de un fichero Figura 11 - SORT - Copia parcial de un fichero

5 Figura 12 - SORT - Ordena y cambia disposicion de campos Figura 13 - SORT - Eliminar repetidos Figura 14 - SORT - Acumular

6 1. MVS (MULTIPLE VIRTUAL STORAGE) MVS (Multiple Virtual Storage, Múltiple Almacén Virtual en inglés) fue el sistema operativo más usado en los modelos de mainframes System/370 y System/390 de IBM. No tiene ninguna relación con VM/CMS, otro sistema operativo de IBM. El MVS fue lanzado al mercado por primera vez en 1974, y luego fue renombrado a MVS/XA (por arquitectura extendida en inglés), más tarde a MVS/ESA (por arquitectura de sistemas empresariales), luego se renombró como OS/390 cuando se le añadió al sistema operativo los servicios de UNIX, y finalmente a z/os cuando los modelos zseries fueron introducidos al mercado. Todos ellos, sin embargo, son fundamentalmente el mismo sistema operativo. De hecho, los programas que hayan sido diseñados para el sistema MVS pueden correr en z/os sin modificación alguna. MVS fue creado basado en SVS (Single Virtual Storage, Único Almacén Virtual), y éste a su vez fue creado a partir de MVT, una de las variantes del sistema operativo OS/360. La variante original del OS/360 era PCP (Programa de Control Primario) no soportaba la ejecución de tareas múltiples, y MVT (Multitareas con número de Tareas Variables) era una mejora que era capaz de la ejecución de múltiples tareas. Sobre esta base, el sistema SVS añadió el almacén virtual, mejor conocido como memoria virtual; el espacio de direccionamiento de esta memoria era compartido por todas las aplicaciones. MVS, finalmente, añadió la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de allí su nombre. Este sistema se usa típicamente en aplicaciones comerciales y bancarias, y éstas son normalmente escritas en COBOL. Normalmente estos programas escritos en COBOL eran usados en sistemas transaccionales como IMS y CICS. JCL (Job Control Language), la interfaz de proceso Batch. TSO (Time Sharing Option), la interfaz interactiva de tiempo compartido. ISPF Es una interfaz que permite al usuario lograr las mismas tareas que TSO pero de una manera orientada a menús y formularios. El sistema se usa normalmente en negocios y bancos, y las aplicaciones se suelen escribir en COBOL. Los programas COBOL fueron tradicionalmente usados con sistemas de procesamiento de transacciones como IMS YCICS. Para un programa ejecutándose en CICS, se insertan las sentencias especiales EXEC CICS en el código fuente COBOL. Un preprocesador replaza dichas sentencias EXEC CICS por el apropiado código COBOL para llamar a CICS antes de que el programa se compile. 6

7 2. ISPF (INTERACTIVE SYSTEM PRODUCTIVITY FACILITY) (Interfaz TSO/ISPF) Es un conjunto herramienta para el sistema operativo IBM z/os(mvs, OS/390) en los ordenadores Mainframe. Incluye un editor de pantalla, el interfaz de usuario fue comercializado a finales de los años 80, incluyendo SPFPC. Principalmente provee a la terminal IBM 3270 de un interfaz con menús y diálogos para ejecutar herramientas de sistema bajo TSO. Frecuentemente es utilizado para manipular archivos por medio de su PDF (Product Development Facility). El ISPF es ampliable y muy a menudo es utilizado como interfaz para otros programas de aplicación. Muchos productos vendidos para el sistema operativo MVS utilizan los menús de ISPF para acceder a sus herramientas. 7

8 3. CICS. (CUSTOMER INFORMATION CONTROL SYSTEM) Figura 1 - Subsistemas del OS-390 CICS es un gestor de transacciones. La ejecución de un programa es una transacción, y cada transacción genera una Tarea. Una Transacción es cada una de las entradas que se realiza desde el Terminal. Una Tarea es la unidad de trabajo de CPU creada por una transacción. Cuando se invoca una transacción, un programa determinado se carga en memoria y se inicia la Tarea. Así aunque varios usuarios invoquen la misma transacción, cada uno tendrá una tarea distinta. CICS es multitarea (concurrencia). Además varias tareas diferentes pueden compartir el mismo programa si este es reentrante (no cambia en ningún momento). CICS permite compartir la Procedure Division de un programa y sin embargo acceder a Working Storage Sections diferentes. El CICS es el monitor de teleproceso. Es un producto que permite el tratamiento de procesos en tiempo real, una interfase software para soportar nuestros programas de aplicación en tiempo real entre los programas de aplicación y el sistema operativo. Se podría pensar que el CICS es un Sistema Operativo dentro de otro Sistema Operativo. En estos términos, CICS es un SO especializado cuya finalidad es proveer un entorno para la ejecución de programas de aplicación ON LINE, incluyendo interfases para ficheros y productos de Bases de Datos. El sistema total es conocido normalmente como un sistema DB/DC (Data Base/Data Control) El esquema del proceso en tiempo real puede ser el siguiente: Un operador, desde una oficina, introduce algún dato por el Terminal; la información viaja por la línea telefónica hasta el ordenador central; éste procesa la solicitud (por ejemplo una petición de saldo) y envía la respuesta al Terminal que efectuó la petición. Un Monitor de Teleproceso (CICS) junto a un adecuado Método de Acceso a Telecomunicaciones (VTAM), permiten que este trasiego de información se efectúe de forma muy rápida y eficaz. En un sistema BATCH los recursos utilizados (principalmente ficheros) sólo están disponibles cuando el programa ha acabado de usarlos, llegando así a estar accesibles para cualquier petición. Hay varios CICS: Para Desarrollo, Explotación, Test, Correo Electrónico. 8

9 4. CARACTERÍSTICAS DE LOS PROGRAMAS BAJO CICS. BATCH VS ON LINE Desde el punto de vista de la EJECUCIÓN: Un programa BATCH se lanza ejecutándose de principio a fin sin que ningún usuario pueda interferir en el proceso durante la ejecución. Un programa ON-LINE permite interacciones con el usuario a través de un Terminal. Además permite que un mismo programa sea ejecutado simultáneamente por varios usuarios. Desde el punto de vista de la utilización de MEMORIA: Un programa BATCH mantiene reservado para su uso exclusivo todo el espacio físico de memoria requerido por el programa durante todo el tiempo de ejecución. Sin embargo en un programa ON-LINE bajo CICS, es éste el que gestiona dinámicamente la memoria, proporcionando áreas de memoria según las necesidades del programa que en ese momento se están ejecutando. Desde el punto de vista de utilización de FICHEROS, Un programa BATCH hace un uso exclusivo de la información de los ficheros que requiere debiendo ser definidos expresamente en el programa Mientras que en un programa ON-LINE bajo CICS, se podrá acceder en todo momento a la información de cualquier fichero que reconozca el CICS sin requerir una definición expresa en el programa, pudiendo ser esto mismo realizado por cualquier otro programa que también se esté ejecutando bajo CICS. Un programa BATCH envía sus instrucciones de E/S directamente al SO. Los programas de aplicación del CICS envía tales instrucciones al CICS y éste maneja el interfase con el Sistema Operativo. Desarrollo de aplicaciones en HOST. Teniendo la estación de trabajo conectada al HOST, bajo MVS y desarrollando las aplicaciones bajo TSO O bien funcionando de forma autónoma disponiendo de un CICS/OS2. 9

10 5. LA ARQUITECTURA DE DESARROLLO Figura 2 - Arquitectura de desarrollo Es una estructura que pretende facilitar el desarrollo de aplicaciones que deben ejecutarse bajo COBOL/II, CICS y DB2. Se compone de una serie de productos, programas, enganches con otras aplicaciones, etc... Esta infraestructura proporciona una rápida puesta en marcha de aplicaciones y ahorro de tiempo en el mantenimiento. Se puede ver como un conjunto de herramientas que para su estudio las agruparemos en herramientas de manejo de datos, para el desarrollo ON-LINE y el desarrollo BATCH. Herramientas de Manejo de Datos. Figura 3 - Herramientas de la arquitectura de desarrollo 10

11 Diccionario de Datos: Se definen Entidades de las aplicaciones, así como los Atributos que las componen, esto es, las tablas DB2 y sus campos. Permite relacionar atributos de otras entidades y efectuar el mantenimiento de índices y vistas. QMF: Es un producto mediante el cual se pueden emitir sentencias (en SQL) contra Bases de Datos DB2 de forma interactiva. SPUFI: También emite comandos SQL con la salvedad de que el proceso a realizar está ya escrito en un fichero y permite usar sentencias de definición de datos PROEDIT: Editor para tablas DB2 que permite procesar tablas DB2 fácil y rápidamente pues es de apariencia similar al ISPF. Usando esta aplicación se pueden modificar filas de las tablas sin conocimientos de SQL. LIBRARIAN: Es un gestor de módulos fuentes, esto es, programas y copies que mantiene hasta 10 versiones de un programa y 5 de una copy. Las copies del programa deben ser pasadas a librarian antes que él para que la compilación de cambio de entorno no falle. Herramientas de desarrollo ON-LINE Figura 4 - Herramientas de desarrollo ON-LINE 11

12 6. SQL. DB2. CURSORES. DB2 es el sistema gestor de Bases de Datos de IBM. (Ha de permitir concurrencia, seguridad (privilegios y prohibiciones) e integridad referencial, (coherencia dentro de la BD)). Clave Primaria (PRIMARY KEY): Si una columna está definida como clave primaria, los datos de esa columna (campo) serán únicos. Es una columna o un conjunto de columnas que identifican unívocamente a cada fila. Debe ser única, no nula y obligatoria. Como máximo, podemos definir una clave primaria por tabla. Esta clave se puede referenciar por una columna o columnas. Cuando se crea una clave primaria, automáticamente se crea un índice que facilita el acceso a la tabla. Clave Ajena, Externa (FOREING KEY): Esta formada por una o varias columnas que están asociadas a una clave primaria de otra o de la misma tabla. Se pueden definir tantas claves ajenas como se precise, y pueden estar o no en la misma tabla que la clave primaria. El valor de la columna o columnas que son claves ajenas debe ser: NULL o igual a un valor de la clave referenciada (regla de integridad referencial). SQL: es un lenguaje declarativo. En cualquier BD trabajaremos con el lenguaje SQL. DDL: Data Definition Language: CREATE, DROP, ALTER DML: Data Manipulation Language: SELECT, INSERT, UPDATE, DELETE. DCL: Data Control Language: CREATE DATABASE NombreDB DROP DATABASE NombreDB CREATE TABLE NombreTabla (Nom-campo TipoDato RestriccionNulidad, Nom-campo2 TipoDato2 RestricciónNulidad ) RESTRICCIÓN NULIDAD: NOT NULL: si a un campo le especificamos NOT NULL, obligamos a que en ese campo se meta información, no se puede quedar vacío. NOT NULL WITH DEFAULT: No permite nulos, pero si se deja en blanco rellena. Con esta opción podríamos dejar campos sin rellenar en la tabla. NULLABLE: que permite nulos ( en caso de no poner nada cogería esa opción por defecto DROP TABLE NombreTabla ( RESTRICT / CASCADE ) SELECT Campo1,...,CampoN INTO :Var1,..., :VarN FROM Tabla WHERE condiciones GROUP BY Agrupaciones para sacar datos comunes 12

13 HAVING Filtro. Establece condiciones pero para grupos ORDER BY Ordena INSERT INTO Tabla (Campo1, Campo2,, CampoN) VALUES (Valor UPDATE Tabla SET Campo1 = valor,, CampoN = valor WHERE DELETE FROM Tabla WHERE Desde que nos conectamos hasta que ejecutemos ROLLBACK, El rollback recupera la BD y la deja como estaba. Se usa en caso de error. EXEC SQL ROLLBACK END-EXEC El commit al contrario que Rollback, hace los cambios permanentes en las tablas. Para evitar largos bloqueos de las tablas, las aplicaciones deben hacer confirmaciones de los cambios realizados cada cierto número de registros (COMMIT), lo que liberará los bloqueos existentes hasta ese momento. Para ello, durante el proceso se harán confirmaciones periódicas de los datos modificados (COMMIT), de forma que cuando el proceso falla en su ejecución, el DB2 se encarga de restablecer las tablas a su estado en la última confirmación, deshaciendo todos los cambios no confirmados (ROLL BACK). EXEC SQL COMMIT END-EXEC 6.1. Cursores Hasta ahora solo se nos devolvía dentro de cobol una fila. Los cursores nos permitirán trabajar con consultas de más de una fila. Declaración: EXEC SQL DECLARE Nombre-cursor CURSOR FOR SELECT WHERE Campo = var END-EXEC PROCEDURE DIVISION 13

14 MOVE VALOR TO VAR EXEC SQL OPEN Nombre-cursor END-EXEC Lectura: EXEC SQL FETCH Nombre-cursor INTO :VAR END-EXEC EXEC SQL CLOSE Nombre-cursor 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 actualizaciones en la tabla, hay que indicárselo al cursor cuando se declara. PROCEDURE DIVISION EXEC SQL UPDATE Tabla SET Campo = :valor WHERE CURRENT OF Nombre-cursor END-EXEC Sólo se puede modificar la última lectura, aunque el puntero apunte a la siguiente El cursor nos devuelve la tabla virtual, y podemos trabajar sobre ella, pero la tratamos como un fichero secuencial 6.2. Documentación para las pruebas de las tablas DB2 utilizadas Aparte del documento de ciclos y de los ficheros de E/S, hay que presentar el contenido de las tablas DB2 con las que hemos probado el programa. Si nuestro programa hace algún tipo de modificación (insert, update o delete) sobre estas tablas, tendremos que presentar el contenido de las mismas antes de realizar la modificación y después de hacerla. Por cada tabla tendremos que presentar un (dos si sufre modificación) fichero con formato EXCEL que construimos de la siguiente forma: Vamos a la ventana de mandatos (MS-DOS) Exportamos la tabla que queremos presentar. Para ello ejecutamos el siguiente comando: DB2 EXPORT TO Destino OF WSF SELECT * FROM xxxx 14

15 Donde: xxxx es el nombre de la tabla que queremos exportar. Y Destino es el lugar donde vamos a dejar el fichero que contiene los datos de la tabla. El nombre que le vamos a dar tendrá extensión wks. Nos vamos a Excel y creamos un fichero nuevo. Abrimos desde Excel nuestro fichero wks y seleccionamos todas las filas y las copiamos al fichero nuevo. Ahora en ese fichero: FORMATO / COLUMNA / AUTOAJUSTAR SELECCIÓN 15

16 7. PROGRAMAS DE REARRANQUE Y REPOSICIONAMIENTO. ARQUITECTURA BATCH. Los grandes procesos Batch con gran número de actualizaciones DB2 plantean problemas ya que mantienen durante largo tiempo bloqueos en las tablas modificadas, impidiendo la concurrencia de otros procesos batch o del online. Por otra parte su recuperación en caso de abend o de rearranque de todo el sistema es muy costosa ya que el DB2 debe restaurar sus tablas a la situación inicial, bloqueando todas las páginas que se hubieran utilizado. Para evitar ambos problemas la aplicación debe estar preparada para efectuar confirmaciones de los cambios (inserciones, borrado, modificaciones) cada cierto número de actualizaciones (COMMIT). De esta manera se liberaran los bloqueos adquiridos hasta ese momento y se suavizará la recuperación del proceso. Pero surge el problema del tratamiento de los objetos no DB2, tales como ficheros, ya que el sistema no contempla de manera estándar su tratamiento. Para esto se ha desarrollado una serie de utilidades que mediante la alocación dinámica de ficheros sincroniza la actualización de ficheros secuenciales de salida con la de objetos DB Funcionamiento del DB2 El DB2 en caso de tener que hacer recuperación después de un error en ejecución de programa, debe buscar en el Log propio del subsistema que contiene los datos de cambios en Base de Datos y Puntos de Control del Sistema. Para eliminar el problema de bloqueo, DB2 utiliza la sentencia COMMIT que libera todos los recursos DB2 que el proceso estuviera utilizando (páginas, tablespaces, índices, etc.). Por defecto cierra todos aquellos cursores que estuviesen abiertos y considera definitivos todos los cambios realizados sobre las tablas. Se llama unidad de recuperación (UR) a la secuencia de operaciones realizadas entre dos puntos de COMMIT y hay que tener en cuenta que en caso de un ABEND el DB2 desharía todos los cambios realizados en la última UR, es decir, hasta el último COMMIT. El DB2 deshace los cambios no confirmados en caso de error (ROLL BACK), por ello, para reposicionar los procesos que sólo actualizan datos en DB2, bastará con guardar la última clave tratada y confirmada en los ficheros de entrada, para continuar desde ella al rearrancar. Dicha clave se alamcena en una tabla de la arquitectura y se recuperararía en un relanzamiento del programa para releer los ficheros de entrada o las tablas hasta el último COMMIT realizado antes de que se interrumpiera la ejecución. Uno de los problemas es que no se contempla el reposicionamiento de objetos no DB2 tales como ficheros de salida; para ello la arquitectura ha generado herramientas para su tratamiento Rearranque de programas Se realizará rearranque cuando la ejecución se interrumpa de alguna manera (caída de línea, de DB2, ABEND, etc.). Entonces el DB2 hará ROLLBACK (vuelta atrás automática de los cambios realizados en las tablas en la última unidad de recuperación, desde el último COMMIT) Ficheros dinámicos para salida Como se ha apuntado el DB2, automáticamente vuelve a la situación que existía en el último punto de COMMIT, pero los objetos no DB2 no. 16

17 Los ficheros de salida se han seguido generando y no podemos conocer cuales eran sus datos antes. Por ello la arquitectura ha creado una serie de utilidades que mediante la alocación dinámica de ficheros sincroniza la actualización de ficheros secuenciales de salida con la de los objetos DB2. El sistema, por cada uno de los ficheros de salida, que se han definido en una de las tablas de trabajo, genera tantos ficheros dinámicos como procesos de COMMIT se hayan realizado y posteriormente realizará una unión de todos ellos Soporte Físico Como soporte a éste tratamiento y para hacerlo posible se utilizan dos tablas DB2, varias rutinas para la alocación dinámica, diversos parámetros en el JCL de ejecución de cada proceso y varios JCL's que enmarcan la ejecución de nuestros programas batch. En la arquitectura HOST de ISBAN Las aplicaciones guardarán toda la información necesaria para reposicionar sus procesos Batch en caso de rearranque, en las tablas DAREPOS y DAPROCBATCH pertenecientes a la arquitectura. (ver ANEXO3) También se facilitan una serie de esqueletos de programas, así como copys con campos estándar para la codificación de los mismos. (ver COPYS) DCLGEN de las Tablas DB2. D Dclgen de la tabla DAREPOS generada por Arquitectura. D Dclgen de la tabla DAPROCBATCH generada por Arquitectura. URDCLGEN Dclgen de la tabla DAREPOS que se usará en los programas. INCLUDES a Utilizar en los Programas con Reposicionamiento. URCOPYS Definición de las variables RURCOMM y RUROPER de comunicación con la rutina UR0000. URWORK Definición de las variables de trabajo para reposicionamiento. URCURSOR Definición del cursor a utilizar en el programa con reposicionamiento. COPYS a Utilizar en los Programas con Reposicionamiento. URSQLCOD Definición de la variable para controlar el SQLCODE de los cursores de reposicionamiento. MURSWITCH Definición de los SWITCHES utilizados por el programa con Reposicionamiento. URMENSA Definición de las variables de trabajo a utilizar para la cancelación Concatenación de Ficheros. Se efectúa mediante el procedimiento URSORTX. Debe haber tantos JCL's de concatenación como distintos ficheros de salida trate el proceso Borrado de Ficheros de COMMIT. Una vez concatenados los ficheros y antes de volver a pasar el proceso se deben borrar. Para ello existe un JCL que ejecuta una CLIST llamada URCLEAR, pasándole como en el caso anterior, el nombre del plan, numero de registros por COMMIT, proceso y prefijo de los ficheros. 17

18 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 Borrado Ficheros Ultimo Commit. En caso de tener que relanzar el proceso es necesario borrar los ficheros del COMMIT que no llegó a efectuar. Para ello se ejecuta una CLIST llamada URCLEARU a la que se le pasa como parámetros el nombre del plan, numero de registros del COMMIT, proceso, prefijo de los ficheros y el subsistema DB2. Si no se ha alocado ningún fichero la CLIST no hace nada, razón por la que se debe ejecutar siempre antes del programa de reposicionamiento. Si no se realiza éste paso la aplicación intentará alocar el fichero que ya existe, dando un error de catalogación NOT CATLG 2 y por consiguiente un ABEND del proceso. Por otra parte si se varia alguna característica del fichero (como el tanto por ciento de registros por COMMIT) al reutilizar el mismo fichero no se recogerá el cambio efectuado con lo cual se repetirá el error anterior Ejemplos de JCL's. Pueden consultarse en la libreria SIS.GRUR.REPOS. Hay distintos tipos según el entorno de ejecución, ya que las CLIST y las librerías cambian. En estos ejemplos aparecen con raya continua todas las variables que son propias del proceso o del usuario que lo ejecuta. Muchos de estos parámetros están interrelacionados. Todos los JCL's deberán seguir las normas generales de la instalación, cómo por ejemplo los nombres de los ficheros o los pasos a ejecutar. (ver #JCLREPOS) 7.9. Esqueletos Para facilitar la codificación de los programas se disponen de unos esqueletos en 5 modalidades distintas según utilicen ficheros secuenciales o tablas DB2, de entrada o salida. Dichos esqueletos son unas plantillas sobre las que se insertará la lógica de nuestro programa. En ellos se controla todo el proceso de reposicionamiento y relanzamiento. Se encuentran en la librería: SIS.GRUR.EJEMPLOS. REPOSPS: Esqueleto de programa que efectúa reposicionamiento utilizando un fichero secuencial de entrada y uno de salida. El plan debe llevar asociado la rutina 'UR0000'. REPOSPS. En el programa no aparecerá la llamada a dicha rutina explícitamente ya que se utilizará la variable RUR-CALL de la copy RUROPER para hacer llamadas dinámicas a rutinas. Entrada: Fichero secuencial. Salida: Fichero secuencial. Se emiten COMMIT's cada 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

19 proceso debe borrase el último fichero utilizado porque se intentará crear de nuevo, obteniendo un error de catálogo puesto que ya existe. Al rearrancar, se relee el fichero de entrada a partir de los apuntadores guardados en DAREPOS al hacer el último COMMIT, y se continúa grabando en el fichero de salida START $ % 10k 20k 30k 40k 50k 60k FIC [ _ _ _ _ _ _ C C C A S [ _ _ _-----_ X1 Z1 Z2 Z3 X2 X3 X4----] C = Punto de COMMIT A = Punto de ABEND X = Abre fichero de salida Z = Cierra fichero de RESTART Previo borrado del último fichero de COMMIT (4) $ % 10k 20k 30k 40k 50k 60k FIC [ > _ _ _ k 20k. 30k R C C F S _ _ _----_ X4 Z4 Z5 Z6 X5 X6 R = Punto de RESTART C = Punto de COMMIT F = Punto de FINAL X = Abre fichero de salida Z = Cierra fichero de salida Tratamiento a seguir por los programas de aplicación en base a un ejemplo real. Programa LQBBN01. Lo primero que se ha de hacer siempre que nos enfrentemos a la resolución de programas de este tipo es identificar del tipo de programa: Se debe buscar el esqueleto que más se ajuste al programa que se va a ejecutar. A continuación se obtiene una copia del esqueleto pasando el esqueleto a nuestras librerías, sin modificar lo directamente pues más adelante serán utilizados por otros usuarios. Durante la codificación hay que tener en cuenta que cada vez que se realiza un COMMIT todos los cursores se cierran (aunque no se haya realizado CLOSE); por eso si se ha abierto alguno que no pertenezca al reposicionamiento, hemos de recordar abrirlo de nuevo. Todos los switch que controlen el proceso deben guardarse (en la tabla DAREPOS) porque si hay relanzamiento se debe saber qué parte del programa se debe ejecutar. Si se utilizan tablas internas para validaciones, el primer paso al rearrancar, debe ser cargarlas de nuevo. Se trata de reconstruir la situación al punto donde se quedó. 19

20 Debe tenerse en cuenta que si se utilizan en el programa tablas internas en las que se guarden acumuladores o datos intermedios, no se dispondrá de ellos en el momento del relanzamiento. Entonces será necesario utilizar una tabla DB2 y trabajar con ella de la misma forma que con los cursores de reposicionamiento. Podría ser utilizada la tabla DAREPOS si el volumen de los datos lo permite. Es importante decidir el criterio lógico de COMMIT, es decir, cada cuánto tiempo se realiza un commit. Se puede establecer según el número de registros leídos del fichero maestro, tratados o grabados en el fichero de salida, o según el número de acceso a una tabla DB2, pero se ha de tener clara la lógica para realizar el incremento del contador que nos dirá cuando efectuamos un COMMIT..!! En el programa LQBBN01 se enfrentan dos ficheros de entrada, y como lógica se ha decidido ir incrementando el contador en base alas lecturas del fichero maestro. Los programas Batch con reposicionamiento reciben como entrada los parámetros necesarios para su control. No son parámetros de aplicación, si necesitase otros parámetros para su proceso estos deberán pasarse al programa mediante ficheros de entrada. Los parámetros para el control del reposicionamiento son: PLAN Nombre del plan a ejecutar con reposicionamiento. Debería corresponder con el propio. NUMREG Número de registros que se van a procesar antes de cada confirmación. Realmente no tiene porque indicar el número de registros de entrada: sólo es el tope del contador del bucle de proceso de registros. NUMPROC Número del proceso asociado a ese Job. Normalmente siempre es '1' salvo el caso de programas que bifurcan y tratan tablas distintas según alguna entrada que lean. En este caso se pueden lanzar dos o más Jobs en paralelo con el mismo programa/plan pero distinto Número de Proceso para poder reposicionarse cada cual correctamente e independientemente del otro Job. PREFIX Prefijo de los ficheros de salida generados. POOL Pool de discos. Este parámetro es opcional, si no se pone toma por defecto SYSDA. Ahora se han de preparar las tablas para la ejecución. Para ello se han de obtener y modificar los JCL's correspondientes. No debemos olvidar probar el proceso de relanzamiento una ver construído el programa. Se deb cancelar una vez que se está ejecutando y volverlo a submitir. (EJECUTAR). **************************************************************************************** *** **************************************************************************************** *** * PROGRAMA: LQBBN01 * * FECHA CREACION: * * AUTOR: INSA * * INSTALACION: CLIENTE.ISBAN. * * DESCRIPCION: EL PROCESO DARÁ NUEVAS ALTAS EN LA TABLA DE SALDOS * VALOR PARA LIQUIDACIÓN DE CONTRADOS DE PRSTAMOS.(SALDO_VALOR_ 20

21 * _PTM). * A PARTIR DEL FICHERO DE ALTAS DEL DÍA(ALTAS1),ORDENADO POR * CONTRATO, Y DEL FICHERO DE CONTRATOS QUE LIQUIDAN POR EL NUEVO * SISTEMA(CONTBA3) ORDENADO POR CONTRATO, SELECCIONAMOS LAS ALTAS * ENFRENTANDO AMBOS FICHEROS. CON CADA ALTA VÁLIDA(ENCONTRADA EN * EL FICHERO DE CONTRATOS) GENERAMOS UN REGISTRO EN LA TABLA * SALDO_VALOR_PTM CON EL SALDO A 0 POR CADA POSICIÓN LEÍDA EN EL * FICHERO CONTBA3. LA PREESISTENCIA DEL REGISTRO QUE SE VA A DAR * DE ALTA EN SALDO_VALOR_PTM IMPLICA UN ERROR, POR LO QUE SE * GRABA EN EL FICHERO DE SALIDA DE ERRORES (ERRALTA) * **************************************************************************************** *** * * RUTINAS: * RUTINA1: XX_CANCELACION_PROCESOS_BATCH: * * CANCELAR LA EJECUCION DE UN PROGRAMA POR * CUALQUIER TIPO DE ERROR * * RUTINA2: UR0000: * * MUEVE LOS PARÁMETROS JCL A LA RURCOMM, Y * ACCEDE AL DB2 * **************************************************************************************** ** * * TABLAS: * TABLA1: SALDO_VALOR_PTM * * SALDOS VALOR PARA LIQUIDACIÓN DE CONTRATOS * DE 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

22 * FICHERO DE CONTRATOS DE PRESTAMOS QUE LIQUIDAN POR EL NUEVO * SISTEMA. FICHERO SECUENCIAL DE ENTRADA1 SELECT CONTBA3 ASSIGN TO CONTBA3 FILE STATUS IS FS-CONTBA3. * FICHERO CON LAS ALTAS DEL DÍA.FICHERO SECUENCIAL DE ENTRADA2 SELECT ALTAS1 ASSIGN TO ALTAS1 FILE STATUS IS FS-ALTAS1. * FICHERO DONDE SE GRABAN LAS ALTAS NO PRODUCIDAS POR CLAVE * DUPLICADA.FICHERO SECUENCIAL DE SALIDA. SELECT ERRALTA ASSIGN TO ERRALTA FILE STATUS IS FS-ERRALTA. *################################################################* *# #* *# DATA DIVISION #* *# #* *################################################################* *************************************************** DATA DIVISION. *************************************************** FILE SECTION. FD CONTBA3 LABEL RECORD ARE STANDARD BLOCK CONTAINS 0 RECORDS RECORDING MODE IS F. 01 REGCONTBA3 PIC X(280). FD ALTAS1 LABEL RECORD ARE STANDARD BLOCK CONTAINS 0 RECORDS RECORDING MODE IS F. 01 REGALTAS1 PIC X(140). FD ERRALTA LABEL RECORD ARE STANDARD BLOCK CONTAINS 0 RECORDS RECORDING MODE IS F. 01 REGERRALTA PIC X(147). *************************************************** WORKING-STORAGE SECTION. *************************************************** **************************************************************************************** ** *** COPY DE MENSAJES DE ERROR PARA PROGRAMAS BATCH QUE *** USEN " REPOSICIONAMIENTO " **************************************************************************************** ** COPY URMENSA. **************************************************************************************** *** *** COPY QUE CONTIENE LOS " SWITCHES " UTILIZADOS *** POR PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO. **************************************************************************************** *** COPY URSWITCH. **************************************************************************************** *** *** COPY QUE CONTIENE LOS CAMPOS DE TRABAJO UTILIZADOS *** EN PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO. **************************************************************************************** *** 22

23 EXEC SQL INCLUDE URWORK END-EXEC. **************************************************************************************** *** *** CLAVES DE RELANZAMIENTO Y DE REPOSICIÓN PARA EL *** FICHERO CONTBA3 Y ALTAS1 En caso de que un programa vea cancelada su ejecución y tengamos que relanzarlo, tenemos que releer el fichero maestro hasta el punto guardado tras el último COMMIT efectuado antes de su caída. La cave guardada en ese último COMMIT será CLAVE-ALTAS1, que es la clave de reposicionamiento, y la clave temporal que ser irá comparando con ésta en la relectura del maestro, será UR-CLAVE-RELANZAMIENTO. 01 UR-CLAVE-RELANZAMIENTO. 10 IDEMPR-RELANZAMIENTO PIC X(4). 10 IDCENT-RELANZAMIENTO PIC X(4). 10 IDPROD-RELANZAMIENTO PIC X(3). 10 IDCONTR-RELANZAMIENTO PIC X(7). * LA CLAVE DE REPOSICIONAMIENTO ES LA DEL FICHERO MAESTRO ALTAS1 01 CLAVE-ALTAS1. 10 IDEMPR-ALTAS1 PIC X(4). 10 IDCENT-ALTAS1 PIC X(4). 10 IDPROD-ALTAS1 PIC X(3). 10 IDCONTR-ALTAS1 PIC X(7). 01 CLAVE-CONTBA3. 10 IDEMPR-CONTBA3 PIC X(4). 10 IDCENT-CONTBA3 PIC X(4). 10 IDPROD-CONTBA3 PIC X(3). 10 IDCONTR-CONTBA3 PIC X(7). **************************************************************************************** *** *--- ESTRUCTURA DE LQCBN02-TAB-SALDOS-VALOR: 01 TAB-SALDOS-VALOR-TRA. 02 REG-SALDOS-VALOR-TRA OCCURS ELE-SALDOS-VALOR-TRA OCCURS FEC-VALOR-TRA PIC S9(8) COMP DIAS-AVX-TRA PIC S9(8) COMP DIAS-AVB-TRA PIC S9(3) COMP SALDO-VALOR-TRA PIC S9(13)V9(2) COMP-3. **************************************************************************************** *** *** INTRODUCIR AQUI LA COPY QUE CONTIENE LOS CAMPOS *** DE LOS FICHEROS DE ENTRADA Y SALIDA **************************************************************************************** *** * COPY DEL FICHERO DE ENTRADA CONTBA3 DE CONTRATOS DE PRESTAMOS COPY LQYCONTL. * COPY DEL FICHERO ALTAS1 CON LAS ALTAS DEL DÍA COPY BNYDE008. * COPY DEL FICHERO ERRALTA COPY JWYARC01. Añadir en el programa las COPYS e INCLUDES necesarias para el reposicionamiento. **************************************************************************************** *** *** INCLUDES DE LA COPY PARA DB2 **************************************************************************************** *** EXEC SQL INCLUDE SQLCA END-EXEC. 23

24 **************************************************************************************** *** *** INCLUDE DE LAS COPYS PARA REPOSICIONAMIENTO *** " RURCOMM " Y " RUROPER " **************************************************************************************** *** * EXEC SQL INCLUDE URCOPYS END-EXEC. **************************************************************************************** *** *** INCLUDE DE LA COPY DE LA DCLGEN DE " DAREPOS ". *** (TABLA UTILIZADA PARA EL REPOSICIONAMIENTO EN BATCH) **************************************************************************************** *** * EXEC SQL INCLUDE URDCLGEN END-EXEC. **************************************************************************************** *** *** COPY QUE INCLUYE EL CURSOR FOR UPDATE DE DAREPOS. *** TABLA UTILIZADA PARA EL REPOSICIONAMIENTO EN BATCH. **************************************************************************************** *** * EXEC SQL INCLUDE URCURSOR END-EXEC. * * TABLA DE ACTUALIZACIÓN SALDO_VALOR_PTM * EXEC SQL INCLUDE D END-EXEC. * * SWITCHES * SW-SWITCHES. 05 SW-FIN-ALTAS1 PIC 9(1). 88 SW-SI-FIN-ALTAS1 VALUE SW-NO-FIN-ALTAS1 VALUE SW-FIN-CONTBA3 PIC 9(1). 88 SW-SI-FIN-CONTBA3 VALUE SW-NO-FIN-CONTBA3 VALUE 0. * PARA LOS CONTROLES DE DB2 05 SW-DB2-RETURN-CODE PIC S9(04) COMP VALUE ZEROES. 88 DB2-OK VALUE DB2-CLV-NOT-FOUND VALUE DB2-CLV-DUPLI-INSERT VALUE DB2-CLV-DUPLI-SELECT VALUE DB2-RECURSO-NO-DISPONIBLE VALUE DB2-TABLA-BLOQUEADA VALUE SW-LEER-ALTAS1 PIC 9(1). 88 SW-SI-LEE-ALTAS1 VALUE 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 05 CA-ERRALTA PIC X(7) VALUE 'ERRALTA'. 05 CA-ERROR-APERTURA PIC X(26) VALUE 'ERROR AL AB - 'RIR EL FICHERO'. 05 CA-ERROR-INSERT PIC X(26) VALUE 'ERROR AL HA - 'CER EL INSERT'. 05 CA-ERROR-LECTURA PIC X(26) VALUE 'ERROR AL LE - 'ER EL FICHERO'. 05 CA-ESCRIBIR-SALDO-PTM PIC X(28) VALUE 'ESCRIBIR SA - 'LDO-VALOR-PTM'. 05 CA-SALDO-VALOR-PTM PIC X(21) VALUE 'SALDO-VALOR - '-PTM'. 05 CA-LEER-ALTAS1 PIC X(21) VALUE 'LEER FICHER - 'O ALTAS1'. 05 CA-LEER-CONTBA3 PIC X(22) VALUE 'LEER FICHER - 'O CONTBA3'. 05 CN-CERO PIC 9(1) VALUE CN-UNO PIC 9(1) VALUE CN-OCHO PIC 9(1) VALUE CN-DIECISIETE PIC 9(2) VALUE CN-DIECIOCHO PIC 9(2) VALUE CN-OCHENTA PIC 9(2) VALUE CA-TIPO-ERROR-F PIC X(1) VALUE 'F'. 05 CA-ESTADO-C PIC X(1) VALUE 'I'. 05 CA-ESTADO-I PIC X(1) VALUE 'P'. 05 CA-ESTADO-P PIC X(1) VALUE 'C'. 05 CA-ESTADO-F PIC X(1) VALUE 'F'. 05 CA-TIPO-ERROR-D PIC X(1) VALUE 'D'. 05 CA-COD-RETORNO PIC X(4) VALUE '3333'. 05 CA-FICH-OK PIC X(2) VALUE '00'. 05 CA-FIN-FICH PIC X(2) VALUE '10'. 05 CA-CODERROA PIC X(4) VALUE 'GL01'. 05 CA-CODCESTX PIC X(3) VALUE 'PTM'. 05 CA-AORIGEN PIC X(3) VALUE 'CSV'. * * CAMPOS PARA LA FUNCIÓN DE ERRORES * WK-CANCELA. 05 WK-TIPO-ERROR PIC X(001). 05 WK-COD-RETORNO PIC X(004). 05 WK-DESCRIPCION PIC X(080). 05 WK-RESPONSABLE PIC X(030). 05 WK-PROGRAMA PIC X(008) VALUE 'LQBBN01'. 05 WK-PARRAFO PIC X(030). 05 WK-ERROR-DB2. 10 WK-SQLCA PIC X(148). 10 WK-TABLA-DB2 PIC X(015). 10 WK-DATOS-ACCESO PIC X(104). 05 WK-ERROR-RUTINA. 10 WK-RUTINA PIC X(008). 10 WK-PARAMETROS PIC X(114). 05 WK-ERROR-TABLA-MEMORIA. 10 WK-TABLA-MEM PIC X(030). 10 WK-INDICE PIC X(006). 10 WK-DATOS-TABMEM PIC X(086). 05 WK-ERROR-FICHERO. 10 WK-DDNAME PIC X(008). 10 WK-FILE-STATUS PIC X(002). 10 WK-DATOS-REGISTRO PIC X(112). 05 WK-EXISTENCIA-CONTRATO. 10 FILLER PIC X(57) VALUE 'YA EXISTE - 'CONTRATO EN SALDO_VALOR_PTM PARA POSI - 'CIÓN = '. 10 WK-TIPMVTO PIC X(3) VALUE SPACES. 05 WK-LECTURAS-CONTBA3. 10 FILLER PIC X(42) VALUE 'REGISTROS - 'LEÍDOS EN EL FICHERO CONTBA3: '. 10 WK-CONT-CONTBA3 PIC 9(9) VALUE ZEROS. 05 WK-LECTURAS-ALTAS1. 10 FILLER PIC X(42) VALUE 'REGISTROS - 'LEÍDOS EN EL FICHERO ALTAS1: '. 10 WK-CONT-ALTAS1 PIC 9(9) VALUE ZEROS. 05 WK-ESCRITURAS-ERRALTA. 10 FILLER PIC X(46) VALUE 'REGISTROS - 'ESCRITOS EN EL FICHERO ERRALTA: '. 25

26 10 WK-CONT-ERRALTA PIC 9(9) VALUE ZEROS. 05 WK-ESCRITURAS-SALDO-VALOR-PTM. 10 FILLER PIC X(57) VALUE 'REGISTROS - 'ESCRITOS EN LA TABLA SALDO_VALOR_PTM'. 10 WK-CONT-SALDO-VALOR-PTM PIC 9(9) VALUE ZEROS. * PARÁMETROS PARA EL RESTO DE INCIDENCIAS SIN CATALOGAR(TIPO Q) 05 WK-ERROR-OTROS. 10 WK-RESTO-DATOS PIC X(122). 01 IND-I PIC 9(1). 01 FECAPER-NUM PIC X(8). 01 FECAPER-COMP3 REDEFINES FECAPER-NUM. 05 FECAPER-FECHA PIC 9(8). * * DEFINICIÓN DE LOS CAMPOS DE LOS FICHEROS * 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. *--- FILE STATUS 01 FS-CONTBA3 PIC X(2) VALUE '00'. 01 FS-ALTAS1 PIC X(2) VALUE '00'. 01 FS-ERRALTA PIC X(2) VALUE '00'. * * TABLAS INTERNAS * W-POSICION-ALTA PIC X(03). 01 W-POSICIONES. 05 W-POSICION OCCURS 8 PIC X(03). ****************** LINKAGE SECTION. ****************** En esta variable de linkage se recibirán los datos pasados en PARÁMETROS en el JCL a través de la copy RURCOMM. 01 PARMLIST. 05 PARM-LNG PIC XX. 05 PARAMETRO PIC X(200). ************************************ PROCEDURE DIVISION USING PARMLIST. ************************************ ******************************************** * RUTINA-PRINCIPAL. ******************************************** Algo que llamará la atención pero que no ha de asustarnos es el hecho de que se usen dos inicios y dos finales en la rutina principal del programa. Esto tiene su sentido porque utilizamos un inicio y un final del esqueleto que en el que se controlan temas relacionados con el reposicionamiento. Esto no implica que la lógica de nuestro programa encaje exactamente con A100-INICIO-PROGRAMA, A400-PROCESO- PROGRAMA Y S900-FIN, ya que iremos entremezclando nuestra lógica con la del esqueleto con lo que es necesario conocer qué hace el esqueleto para encajar nuestro programa. PERFORM S100-INICIO THRU S100-INICIO-EXIT. * PERFORM A100-INICIO-PROGRAMA THRU A100-INICIO-PROGRAMA-EXIT. PERFORM A400-PROCESO-PROGRAMA THRU A400-PROCESO-PROGRAMA-EXIT. PERFORM A900-FIN-PROGRAMA THRU A900-FIN-PROGRAMA-EXIT. 26

27 * PERFORM S900-FIN THRU S900-FIN-EXIT. STOP RUN. **************************************************************************************** ** *** *** S100-INICIO *** **************************************************************************************** ** S100-INICIO. * * *--- INICIALIZAR VARIABLES DE PROCESO (COPY URSWITCH) * * SET NO-HAY-ERROR-PROCESO TO TRUE. SET NO-FIN-PROCESO TO TRUE. SET NO-RELANZAMIENTO TO TRUE. SET NO-FIN-DATOS TO TRUE. SET NO-ERROR TO TRUE. MOVE ZEROS TO CA-COMMIT. * * *--- ACTUALIZACION DE DATOS DE RURCOMM CON LOS DATOS DE *--- PARAMETRO Y DAPROCBATCH. * * Estos parámetros son pasados al programa por el JCL y recibidos en LINKAGE (PARMLIST). Para obtenerlos se invoca la rutina UR0000 con RUR-INIT, ésta deja los parámetros desglosados en subniveles de la variable RURCOMM. Esta llamada inicial a la rutina UR0000 se tiene que hacer siempre, aunque el proceso no tenga ficheros de salida. La variable RUR-CALL ya contiene el nombre 'UR0000' y pertenece a una de las Copys. El formato de la llamada puede ser uno de los siguientes: EXEC-FUN UR_PARM PARMS(PARAMETROS) END-FUN o CALL RUR-CALL USING RUR-INIT RURCOMM PARAMETROS Las variables obtenidas son: CA-PLANNAME Nombre del plan. CA-PROCESO Número de proceso. CA-NUMREG Número de registros tratados en cada confirmación (COMMIT). CA-PREF Prefijo de los ficheros, dependerá del subsistema donde se esté ejecutando (DES: desarrollo, SIS: sistemas, EXP: explotación). Cuando el proceso tiene ficheros de salida, esta llamada a la rutina sirve también para recuperar sus datos, que se almacenarán la variable CA-DDNAMES de la copy RURCOMM. CALL RUR-CALL USING RUR-INIT RURCOMM PARAMETRO MOVE CA-PROCESO TO UR-PROCESO Antes de comenzar el tratamiento de los datos de entrada, se consultará en qué estado se encuentra el proceso, para saber si es necesario reposicionar o por el contrario se comienza el proceso desde el principio. Para ello se accede a la tabla DAREPOS utilizando el cursor REP, proporcionado en la INCLUDE URCURSOR. Se abrirá el cursor para el plan y el número de proceso pasados en los parámetros de reposicionamiento y se recuperará una única fila. EXEC SQL OPEN REP 27

28 END-EXEC. MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-OPEN-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE. * EXEC SQL FETCH REP INTO :RUR-PLANNAME, :RUR-PROCES, :RUR-ESTADO, :RUR-NUMCOMM, :RUR-PUNTEROS END-EXEC. MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK * * *--- "I" : ESTADO DE EJECUCIóN MEDIANTE ARSB (VIA ONLINE) *--- SE HA RESERVADO EL NUMERO DE PROCESO PARA LA *--- EJECUCION. * * IF RUR-ESTADO = CA-ESTADO-I MOVE SPACES TO UR-VALOR-REGISTRO-TEXT MOVE 254 TO UR-VALOR-REGISTRO-LEN MOVE ZEROES TO UR-CEROS *--- ACTUALIZAR A ESTADO "C" Y GUARDAR PUNTEROS. EXEC SQL UPDATE DAREPOS SET RUR_ESTADO = :CA-ESTADO-C, RUR_NUMCOMM = :UR-CEROS, RUR_PUNTEROS = :UR-VALOR-REGISTRO WHERE CURRENT OF REP END-EXEC MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-UPDA-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE *--- REALIZAMOS COMMIT: Y ASÍ ACTUALIZAMOS LA TABLA DAREPOS. *--- SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA *--- COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE *--- CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES. Antes de comenzar se debe hacer una primera confirmación (COMMIT) para liberar el bloqueo sobre la tabla DAREPOS. Ésta no contabiliza en el proceso del número de 28

29 confirmaciones, de hecho, si no hay reposicionamiento, se ha inicializado a cero en la tabla DAREPOS. EXEC SQL COMMIT END-EXEC MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-COMM-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE MOVE ZEROES TO RUR-NUMCOMM ELSE * *--- "P" : IMPLICA QUE LOS FICHEROS RESULTANTES DEL *--- PROCESO HAN SIDO BORRADOS Y SE PUEDE EJECUTAR *--- DE NUEVO EL PLAN. * Estado Inicial (P). Un proceso está en estado inicial P cuando su última ejecución se completó correctamente, sin ningún error. Implica que el proceso se encuentra en condiciones de ser relanzado, los ficheros resultantes del último proceso han sido borrados y se puede ejecutar de nuevo el plan. Si el programa de reposicionamiento comprueba que el proceso se encuentra en estado inicial NO REPOSICIONARÁ SU ENTRADA, puesto que debe comenzar el proceso desde el principio. Si la consulta a la tabla DAREPOS indica que el proceso se encuentra en estado inicial (P), se modificará para inicializar el número de validaciones a cero. Además se pondrá el switch de reposicionamiento a N, para que el proceso comience desde el principio. (SW-RELANZAMIENTO _ NO-RELANZAMIENTO). IF RUR-ESTADO = CA-ESTADO-P MOVE SPACES TO UR-VALOR-REGISTRO-TEXT MOVE 254 TO UR-VALOR-REGISTRO-LEN MOVE ZEROES TO UR-CEROS *--- ACTUALIZAR A ESTADO "C" Y GUARDAR PUNTEROS. EXEC SQL UPDATE DAREPOS SET RUR_ESTADO = :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: *--- SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA 29

30 *--- COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE *--- CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES. EXEC SQL COMMIT END-EXEC MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-COMM-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE MOVE ZEROES TO RUR-NUMCOMM ELSE * *--- "C" : IMPLICA QUE SE ESTAN REALIZANDO COMMITS * O QUE SE ES RELANZAMIENTO EN CASO DE NO SER LA PRIMERA VEZ * Estado Intermedio (C). Un proceso está en estado intermedio cuando durante su última ejecución acabó con un abend o un error después de haber hecho una o varias confirmaciones (COMMIT). Si el programa de reposicionamiento comprueba que el proceso se encuentra en estado intermedio REPOSICIONARÁ SU ENTRADA, puesto que debe comenzar en el siguiente registro de entrada al último confirmado. Si la consulta a la tabla DAREPOS indica que el proceso se encuentra en estado intermedio (C) será necesario reposicionarse antes de comenzar el tratamiento. Para ello: Se mueve la información del puntero (RUR_PUNTEROS) a la variable utilizada para el reposicionamiento: CLAVE-ALTAS1. Se recupera el número de validaciones realizadas (RUR_NUMCOMM). Se pone el switch de reposicionamiento a S, para que el proceso se reposicione antes de comenzar el tratamiento. (SW-RELANZAMIENTO _ SI-RELANZAMIENTO). IF RUR-ESTADO = CA-ESTADO-C MOVE RUR-NUMCOMM TO CA-COMMIT MOVE RUR-PUNTEROS-TEXT TO CLAVE-ALTAS1 SET SI-RELANZAMIENTO TO TRUE EXEC SQL CLOSE REP END-EXEC MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-CLOSE-CUR') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE ELSE EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-ESTADO-DAR') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') 30

31 SQLCA('SQLCA') END-FUN END-IF END-IF END-IF WHEN DB2-CLV-NOT-FOUND MOVE SPACES TO UR-VALOR-REGISTRO-TEXT MOVE 254 TO UR-VALOR-REGISTRO-LEN * * *--- SI NO EXISTE EN DAREPOS SE CREA UNA ENTRADA *--- CON ESTADO "C" GUARDANDO PUNTEROS. * * EXEC SQL INSERT INTO DAREPOS (RUR_PLANNAME, RUR_PROCES, RUR_ESTADO, RUR_NUMCOMM, RUR_PUNTEROS) VALUES (:CA-PLANNAME, :UR-PROCESO, :CA-ESTADO-C, :UR-CEROS, :UR-VALOR-REGISTRO) END-EXEC MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-INSERT-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE *--- REALIZAMOS COMMIT: *--- SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA *--- COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE *--- CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES. EXEC SQL COMMIT END-EXEC MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-COMM-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE MOVE ZEROES TO RUR-NUMCOMM WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-FETCH-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') 31

32 END-FUN END-EVALUATE. S100-INICIO-EXIT. EXIT. **************************************************************************************** ********* * * A100-INICIO-PROGRAMA. * * SE INICIALIZAN TODAS LAS VARIABLES PARA CAMPOS DE LA FUNCIÓN * DE ERRORES Y LOS CAMPOS DE ESTADÍSTICAS. ADEMÁS SE ABREN LOS * FICHEROS CONTBA3 Y ALTAS1 EN MODO ENTRADA Y EL FICHERO ERRALTA * EN MODO DE SALIDA, Y SE LEE EL PRIMER REGISTRO DE CONTBA3 Y * ALTAS1. * **************************************************************************************** ********* A100-INICIO-PROGRAMA. * * *--- INICIALIZAR DCLGEN DE LAS TABLAS Y CAMPOS DE WORKING * * INITIALIZE DCLSALDO-VALOR-PTM WK-ERROR-DB2 WK-ERROR-RUTINA WK-ERROR-TABLA-MEMORIA WK-ERROR-FICHERO WK-ERROR-OTROS CONT-CONTBA3 CONT-ALTAS1 CONT-ERRALTA CONT-SALDO-VALOR-PTM Para el caso de programas que utilizan ficheros de entrada (en nuestro caso CONTBA3 y el maestro: ALTAS1) tienen que controlar mediante un switch (SI-RELANZAMIENTO) si es la primera vez que entra al programa o es relanzamiento porque haya abendado anteriormente el proceso. En éste caso deberá leerse el fichero desde el principio hasta el registro grabado en DAREPOS correspondiente al último COMMIT. * * *--- SE ABREN LOS FICHEROS * * PERFORM A150-ABRIR-FICHEROS THRU A150-ABRIR-FICHEROS-EXIT * * *--- SI ENTRA AL PROGRAMA POR RELANZAMIENTO PORQUE HAYA *--- CASCADO EL PROCESO, DEBE LEERSE EL FICHERO DE ENTRADA *--- DESDE EL PRINCIPIO HASTA EL ULTIMO REGISTRO GRABADO *--- EN EL ULTIMO COMMIT, GRABADO EN "DAREPOS". * * IF SI-RELANZAMIENTO PERFORM A110-RELEER-FICH-ENTRADA THRU A110-RELEER-FICH-ENTRADA-EXIT UNTIL FIN-DATOS * * *--- ENTRA A LEER LOS FICHEROS DE ENTRADA POR PRIMERA VEZ * * ELSE MOVE LOW-VALUE TO CLAVE-ALTAS1 CLAVE-CONTBA3 PERFORM 9100-LEER-FICH-ALTAS1 THRU 9100-LEER-FICH-ALTAS1-EXIT PERFORM 9200-LEER-FICH-CONTBA3 THRU 9200-LEER-FICH-CONTBA3-EXIT END-IF. 32

33 A100-INICIO-PROGRAMA-EXIT. EXIT. ************************************************************* *** *** A110-RELEER-FICH-ENTRADA *** ************************************************************* A110-RELEER-FICH-ENTRADA. IF NO-FIN-PROCESO AND NO-FIN-DATOS READ ALTAS1 INTO BNYDE008 AT END SET FIN-DATOS TO TRUE SET SW-SI-FIN-CONTBA3 TO TRUE SET FIN-PROCESO TO TRUE MOVE HIGH-VALUES TO CLAVE-ALTAS1 NOT AT END SET SW-NO-FIN-ALTAS1 TO TRUE *--- MOVER LOS CAMPOS DEL REGISTRO AL CAMPO WORKING *--- UR-CLAVE-RELANZAMIENTO. MOVE BNYDE008-IDEMPR TO IDEMPR-RELANZAMIENTO MOVE BNYDE008-IDCENT TO IDCENT-RELANZAMIENTO MOVE BNYDE008-IDPROD TO IDPROD-RELANZAMIENTO MOVE BNYDE008-IDCONTRN TO IDCONTR-RELANZAMIENTO END-READ IF FS-ALTAS1 NOT EQUAL CA-FICH-OK AND NOT EQUAL CA-FIN-FICH MOVE CA-PARRAFO-INICIO TO WK-PARRAFO MOVE CA-ALTAS1 TO WK-DDNAME MOVE FS-ALTAS1 TO WK-FILE-STATUS MOVE CA-ERROR-APERTURA TO WK-DESCRIPCION PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF END-IF *--- EL REGISTRO LEIDO ES MAYOR AL ULTIMO LEIDO ANTES DE *--- CASCAR EL PROGRAMA, QUE ESTA GRABADO EN 'DAREPOS'. IF UR-CLAVE-RELANZAMIENTO > CLAVE-ALTAS1 Hemos de tener en cuenta que hay que actualizar la clave de reposicionamiento CLAVE-ALTAS1 a la siguiente, porque el registro almacenado en ella ya ha sido procesado, y se ha de continuar por el siguiente. MOVE UR-CLAVE-RELANZAMIENTO TO CLAVE-ALTAS1 SET FIN-DATOS TO TRUE END-IF. *** A110-RELEER-FICH-ENTRADA-EXIT. EXIT. ************************************************************************************** * A150-ABRIR-FICHEROS. * * SE ABREN LOS FICHEROS CONTBA3 Y ALTAS1 EN MODO ENTRADA Y EL * FICHERO ERRALTA EN MODO DE SALIDA Y SE COMPRUEBA QUE SE HA * REALIZADO LA OPERACIÓN CORRECTAMENTE. EN CASO CONTRARIO SE * LLAMA AL PÁRRAFO 9300-ERROR-FICHERO * ************************************************************************************** A150-ABRIR-FICHEROS. OPEN INPUT CONTBA3 ALTAS1 IF FS-CONTBA3 MOVE CA-PARRAFO-INICIO MOVE CA-CONTBA3 MOVE FS-CONTBA3 MOVE CA-ERROR-APERTURA NOT EQUAL CA-FICH-OK TO WK-PARRAFO TO WK-DDNAME TO WK-FILE-STATUS TO WK-DESCRIPCION PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF 33

34 IF FS-ALTAS1 MOVE CA-PARRAFO-INICIO MOVE CA-ALTAS1 MOVE FS-ALTAS1 MOVE CA-ERROR-APERTURA NOT EQUAL CA-FICH-OK TO WK-PARRAFO TO WK-DDNAME TO WK-FILE-STATUS TO WK-DESCRIPCION PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF. A150-ABRIR-FICHEROS-EXIT. EXIT. **************************************************************************************** ** * A400-PROCESO-PROGRAMA. * * PROCESO PRINCIPAL DEL PROGRAMA. SE REALIZARÁ UN PROCESO CONTÍNUO * EN EL QUE SÓLO SE SALDRÁ CUANDO SE LLEGUE AL FINAL DEL FICHERO * DE ALTAS1 OR CONTBA3, O SE DETECTE ALGÚN ERROR MENCIONADO A * CONTINUACIÓN QUE INDIQUE EL FINAL DEL PROGRAMA * ************************************************************************************** A400-PROCESO-PROGRAMA. Se van alocando los ficheros de salida dinámicamente por cada commit que se realiza. PERFORM S400-PROCESO-COMMIT THRU S400-PROCESO-COMMIT-EXIT UNTIL FIN-PROCESO OR SI-ERROR. El programa contendrá, después de su inicio, un bucle externo y otro interno. El bucle externo, se repetirá hasta que no haya más datos de entrada (SW-FIN-DATOS) o hasta que ocurra un error. A400-PROCESO-PROGRAMA-EXIT. EXIT. ********************************************************************* *** *** S400-PROCESO-COMMIT *** ********************************************************************* S400-PROCESO-COMMIT. En este bucle externo se incluirán las siguientes tareas, además de las propias de la aplicación. Ext. 1. Iniciación del contador de registros procesados a 1. Ext. 2. Alocación de los ficheros de salida, si existen en el proceso. Se hará una llamada a la rutina UR0000 con el parámetro RUR-NEW para alocar los ficheros de salida. Formato: CALL RUR-CALL USING RUR-NEW RURCOMM DCLDAREPOS La rutina UR0000 llamada de ésta manera construirá el nombre del fichero correspondiente para cada DDNAME y número de confirmación, alocando dinámicamente cada uno de ellos. Si durante este proceso se produjese algún error aparecerá reflejado en el fichero de mensajes (RURMSG) y el JOB se cancelará. Así mismo por cada fichero alocado se enviará un mensaje informativo (UR0015). El nombre de los ficheros es distinto por cada COMMIT y se compone de: XXX.DDDDDDDD.PPPPPPPP.RnnVnnnn Donde XXX es el prefijo. Parámetro del JCL. DDDDDDDD es el nombre de la dd del fichero, información contenida en la tabla DAPROCBATCH. PPPPPPPP es el nombre del plan. Parámetro del JCL. 34

35 Rnn. Número del proceso. Parámetro del JCL. Vnnnn. Número del COMMIT al que corresponde. Por lo tanto al final del proceso habrá tantos ficheros por ddname definida en DAPROCBATCH como COMMITS se hayan hecho. No necesitan hacer ésta llamada los programas que no utilizan ficheros secuénciales de salida. Ext. 3. Abrir los ficheros de salida, si existen en el proceso. Bucle Interior. Procesa todos los registros de entrada entre validaciones, hasta que el contador de registros procesados alcanza el valor de CA-NUMREG (parámetro introducido en el JCL), se acaban los datos de entrada o hay algún error. Int. 1. Lectura del siguiente dato de entrada. Int. 2. Proceso propio de la aplicación. Instrucciones para el tratamiento de los datos de entrada. Int. 3. Actualización del contador de registros tratados. Suma uno al contador de registros tratados. Ext. 4. Cerrar los ficheros de salida, si los hay. Ext. 5. Validar las modificaciones DB2. Se hace COMMIT. Ext. 6. SI NO HAY FICHEROS DE SALIDA, sumar 1 al número de validaciones (CACOMMIT) Sólo si no hay ficheros de salida, se debe sumar 1 al número de validaciones, variable CA-COMMIT proporcionada por los parámetros del JCL. En caso de que existan ficheros de salida NO se debe actualizar el número de validaciones, por que lo hace la rutina UR0000 y si se vuelve a hacer en el programa provocará errores. Ext. 7. Sólo si hay ficheros de salida, actualizar el número de validaciones y el puntero en DAREPOS. Actualiza la fila de la tabla DAREPOS correspondiente a este plan/proceso sumando uno al número de validaciones y anotando en el puntero la última clave de entrada tratada correctamente. El plan/proceso con el que estamos trabajando son datos que se leyeron de los parámetros del JCL al principio del programa, en el paso I. 2. * *--- REALIZA UNA LLAMADA DINAMICA A LA COPY DE RURCOMM *--- PARA MONTAR EL NOMBRE DEL FICHERO Y ALOCARLO * * RUR-NEW: LA RUTINA UR0000 LLAMADA DE ESTA MANERA POR EL PROG * DE APLICACIÓN CONSTRUIRÁ EL NOMBRE DE FICHERO CORRESPONDIENTE * PARA CADA DDNAME Y NÚMERO DE COMMIT, ALOCANDO DINÁMICAMENTE * CADA UNO DE ELLOS. ESTA RUTINA A SU VEZ LLAMA A OTRAS RUTINAS * ENSAMBLADOR. EL NOMBRE DE LOS FICHEROS ES DISTINTO POR CADA * COMMIT. CALL RUR-CALL USING RUR-NEW RURCOMM DCLDAREPOS. * *--- ABRIMOS EL FICHERO DE SALIDA PARA EL REPOSICIONAMIENTO. * OPEN OUTPUT ERRALTA. IF FS-ERRALTA NOT EQUAL CA-FICH-OK MOVE CA-PARRAFO-INICIO TO WK-PARRAFO MOVE CA-ERRALTA TO WK-DDNAME MOVE FS-ERRALTA TO WK-FILE-STATUS MOVE CA-ERROR-APERTURA TO WK-DESCRIPCION PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF * *--- INICIALIZA CONTADOR DE REGISTROS A 1 *

36 MOVE CN-UNO TO UR-CONT-REG PERFORM S410-UNIDAD-COMMIT THRU S410-UNIDAD-COMMIT-EXIT UNTIL UR-CONT-REG GREATER CA-NUMREG OR FIN-PROCESO OR SI-ERROR * *--- CERRAR FICHERO SALIDA ERRALTA * CLOSE ERRALTA IF FS-ERRALTA NOT EQUAL CA-FICH-OK PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF * *--- ACTUALIZAR NUMERO DE COMMITS Y PUNTEROS EN DAREPOS. * MOVE CA-COMMIT TO UR-COMMIT MOVE CA-PROCESO TO UR-PROCESO * *--- MOVER LOS CAMPOS CLAVE DEL FICHERO A LOS CAMPOS DE WORKING *--- PARA REPOSICIONAMIENTO: UR-CLAVE-REPOSIC. * * MOVE CLAVE-ALTAS1 MOVE CN-DIECIOCHO TO UR-VALOR-REGISTRO-TEXT TO UR-VALOR-REGISTRO-LEN EXEC SQL UPDATE DAREPOS SET RUR_NUMCOMM = :UR-COMMIT, RUR_PUNTEROS = :UR-VALOR-REGISTRO WHERE RUR_PLANNAME = :CA-PLANNAME AND RUR_PROCES = :UR-PROCESO 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-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

37 PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-PROC-COMM') SQLCA('SQLCA') END-FUN END-EVALUATE * *--- SI NO HAY ERROR VUELVE A LEER EL FICHERO DE ENTRADA * IF SI-ERROR OR FIN-PROCESO CONTINUE ELSE PERFORM 9100-LEER-FICH-ALTAS1 THRU 9100-LEER-FICH-ALTAS1-EXIT. *** S400-PROCESO-COMMIT-EXIT. EXIT. **************************************************************** *** *** S410-UNIDAD-COMMIT *** **************************************************************** S410-UNIDAD-COMMIT. *--- AQUÍ COMIENZA LA LÓGICA DEL PROGRAMA. Este sería el párrafo proceso utilizado en nuestro programa. Enfrentamos el fichero maestro ALTAS1 con el fichero CONTBA3. IF CLAVE-ALTAS1 LESS THAN CLAVE-CONTBA3 SET SW-SI-LEE-ALTAS1 TO TRUE CONTINUE ELSE IF CLAVE-ALTAS1 EQUAL CLAVE-CONTBA3 SET SW-SI-LEE-ALTAS1 TO TRUE PERFORM 2100-PARRAFO-ALTAS THRU 2100-PARRAFO-ALTAS-EXIT PERFORM 9200-LEER-FICH-CONTBA3 THRU 9200-LEER-FICH-CONTBA3-EXIT ELSE SET SW-NO-LEE-ALTAS1 TO TRUE PERFORM 9200-LEER-FICH-CONTBA3 THRU 9200-LEER-FICH-CONTBA3-EXIT UNTIL (CLAVE-ALTAS1 LESS THAN CLAVE-CONTBA3) OR (CLAVE-ALTAS1 EQUAL CLAVE-CONTBA3) END-IF END-IF *--- AQUÍ TERMINA LA LÓGICA DEL PROGRAMA (Ver #ANEXO4) ADD CN-UNO TO UR-CONT-REG * * *--- CUANDO EL CONTADOR DE REGISTROS SEA MAYOR AL CAMPO CA-NUMREG *--- DE "RURCOMM" : CIERRA EL FICHERO, HACE COMMIT Y ACTUALIZA DAREPOS. * * IF UR-CONT-REG GREATER THAN CA-NUMREG CONTINUE ELSE IF SW-SI-LEE-ALTAS1 PERFORM 9100-LEER-FICH-ALTAS1 37

38 THRU 9100-LEER-FICH-ALTAS1-EXIT END-IF END-IF. S410-UNIDAD-COMMIT-EXIT. EXIT. ************************************************************* *** *** A900-FIN-PROGRAMA *** ************************************************************* A900-FIN-PROGRAMA. * * *--- CERRAR FICHEROS DE ENTRADA * * PERFORM 3100-CERRAR-FICHEROS THRU 3100-CERRAR-FICHEROS-EXIT PERFORM 9500-ESTADISTICAS THRU 9500-ESTADISTICAS-EXIT. A900-FIN-PROGRAMA-EXIT. EXIT. ******************************************************************* *** *** S900-FIN *** ******************************************************************* S900-FIN. Estado Final (F) Un proceso se encuentra en estado final cuando después de su última ejecución correcta AÚN NO SE HAN FUSIONADO SUS FICHEROS DE SALIDA. Si el programa de reposicionamiento comprueba que el proceso se encuentra en estado final DEBE TERMINAR sin procesar ningún dato. Puesto que los ficheros de salida definitivos aún no se han creado. En este caso debería arrancarse el JCL desde el paso posterior al programa con reposicionamiento, que fusionará los juegos de ficheros creados por el programa en los ficheros de salida definitivos. * * *--- ACTUALIZA DAREPOS CON EL ESTADO IGUAL A "F". *--- "F" : IMPLICA PROCESO FINALIZADO O PENDIENTE *--- DE UTILIDADES * * EXEC SQL UPDATE DAREPOS SET RUR_ESTADO = :CA-ESTADO-F WHERE RUR_PLANNAME = :CA-PLANNAME AND RUR_PROCES = :UR-PROCESO 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-FIN') SQLCA('SQLCA') END-FUN 38

39 END-EVALUATE. GOBACK. *** S900-FIN-EXIT. EXIT. ************************************************************************************** * 2100-PARRAFO-ALTAS * * POR CADA POSICIÓN SE HA DE DAR UN ALTA EN LA TABLA SALDO_VALOR * _PTM, COM EL CAMPO POSICIONES LQYCONTL-OSICIONES ES DE 24 * CARACTERES Y CADA POSICIÓN ESTÁ DEFINIDA CON 3 CARACTERES,COMO * MÁXIMO SERÁN 8 LAS POSICIONES QUE SE PODRÁN DAR DE ALTA ************************************************************************************** 2100-PARRAFO-ALTAS. MOVE LQYCONTL-POSICIONES MOVE CN-UNO TO W-POSICIONES TO IND-I PERFORM 2150-POSICIONES THRU 2150-POSICIONES-EXIT UNTIL IND-I GREATER THAN CN-OCHO OR W-POSICION(IND-I) EQUAL SPACES PARRAFO-ALTAS-EXIT. EXIT. ************************************************************************************* * 2150-POSICIONES * * COMO MÁXIMO SE DAN DE ALTA 8 POSICIONES EN LA TABLA * SALDO_VALOR_PTM ************************************************************************************* 2150-POSICIONES. MOVE W-POSICION(IND-I) TO W-POSICION-ALTA PERFORM 2200-ESCR-SALDO-V-PTM THRU 2200-ESCR-SALDO-V-PTM-EXIT ADD 1 TO IND-I POSICIONES-EXIT. ************************************************************************************** * 2200-ESCR-SALDO-V-PTM * * SE ESCRIBE EN LA TABLA SALDO_VALOR_PTM UN REGISTRO CON EL * SALDO A 0 POR CADA POSICIÓN LEÍDA EN EL FICHERO CONTBA3 ************************************************************************************** 2200-ESCR-SALDO-V-PTM. MOVE LQYCONTL-IDCENT TO E4294-IDCENT MOVE LQYCONTL-IDPROD TO E4294-IDPROD MOVE LQYCONTL-IDCONTR TO E4294-IDCONTR MOVE W-POSICION-ALTA TO E4294-TIPMVTO MOVE LQYCONTL-CODMONBE TO E4294-CODMONSW MOVE CN-UNO TO E4294-NUMERSEC MOVE LQYCONTL-IDSTIPRO TO E4294-IDSTIPRO MOVE LQYCONTL-COESTREF TO E4294-COESTREF MOVE BNYDE008-FECAPER TO E4294-FHSALV MOVE CN-CERO TO E4294-SALDCTA *--- MOVE BNYDE008-FECAPER(1:4) TO FECAPER-NUM(1:4) MOVE BNYDE008-FECAPER(6:2) TO FECAPER-NUM(5:2) MOVE BNYDE008-FECAPER(9:2) TO FECAPER-NUM(7:2) MOVE FECAPER-FECHA TO FEC-VALOR-TRA(1, 1) MOVE CN-CERO TO DIAS-AVX-TRA(1, 1) MOVE CN-CERO TO DIAS-AVB-TRA(1, 1) MOVE CN-CERO TO SALDO-VALOR-TRA(1, 1) MOVE CN-DIECISIETE TO E4294-IMPSALV-LEN MOVE REG-SALDOS-VALOR-TRA(1) TO E4294-IMPSALV-TEXT 39

40 *--- MOVE LQYCONTL-IDEMPR EXEC SQL INSERT INTO SALDO_VALOR_PTM (E4294_IDCENT, E4294_IDPROD, E4294_IDCONTR, E4294_TIPMVTO, E4294_CODMONSW, E4294_NUMERSEC, E4294_IDSTIPRO, E4294_COESTREF, E4294_FHSALV, E4294_SALDCTA, E4294_IMPSALV, E4294_IDEMPR) VALUES (:E4294-IDCENT, :E4294-IDPROD, :E4294-IDCONTR, :E4294-TIPMVTO, :E4294-CODMONSW, :E4294-NUMERSEC, :E4294-IDSTIPRO, :E4294-COESTREF, :E4294-FHSALV, :E4294-SALDCTA, :E4294-IMPSALV, :E4294-IDEMPR) END-EXEC MOVE SQLCODE TO E4294-IDEMPR TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK * ACUMULAR PARA ESTADISTICAS ADD CN-UNO 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 TO WK-DESCRIPCION MOVE CA-ESCRIBIR-SALDO-PTM TO WK-PARRAFO MOVE CA-SALDO-VALOR-PTM TO WK-TABLA-DB2 MOVE DCLSALDO-VALOR-PTM TO WK-DATOS-ACCESO PERFORM 9400-ERROR-DB2 THRU 9400-ERROR-DB2-EXIT END-EVALUATE ESCR-SALDO-V-PTM-EXIT. EXIT. ************************************************************************************** * 2300-ESCR-ERR-ALTA * * LA PREEXISTENCIA DEL REGISTRO QUE SE VA A DAR DE ALTA EN * SALDO_VALOR_PTM IMPLICA UN ERROR, POR LO QUE SE GRABA EN EL * FICHERO DE SALIDA DE ERRORES (ERRALTA) ************************************************************************************** 2300-ESCR-ERR-ALTA. * ACUMULAR PARA ESTADÍSTICAS ADD CN-UNO TO CONT-ERRALTA INITIALIZE W-COPY-TABLA MOVE E4294-IDEMPR MOVE E4294-IDCENT MOVE E4294-IDPROD MOVE E4294-IDCONTR MOVE CA-CODERROA MOVE E4294-IDSTIPRO TO W-COPY-IDEMPR TO W-COPY-IDCENT TO W-COPY-IDPROD TO W-COPY-IDCONTR TO W-COPY-CODERROA TO W-COPY-IDSTIPRO 40

41 MOVE E4294-COESTREF TO W-COPY-COESTREF MOVE E4294-CODMONSW TO W-COPY-CODMONBE MOVE CA-CODCESTX TO W-COPY-CODCESTX MOVE CA-AORIGEN TO W-COPY-AORIGEN MOVE CA-AORIGEN TO W-COPY-ASUBORIG MOVE CN-OCHENTA TO W-COPY-DATCOMPV-LEN MOVE E4294-TIPMVTO TO WK-TIPMVTO MOVE WK-EXISTENCIA-CONTRATO TO W-COPY-DATCOMPV-TEXT WRITE REGERRALTA FROM W-COPY-TABLA IF FS-ERRALTA NOT EQUAL CA-FICH-OK PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF 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 IF FS-ALTAS1 NOT EQUAL CA-FICH-OK PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF CERRAR-FICHEROS-EXIT. EXIT. ************************************************************************************** * 9100-LEER-FICH-ALTAS1 * * SE REALIZA LA LECTURA DEL FICHERO DE ALTAS1,ACUMULANDO LAS * ESTADÖSTICAS Y TRATANDO SI PROCEDE UN POSIBLE ERROR EN LA * LECTURA ************************************************************************************** 9100-LEER-FICH-ALTAS1. READ ALTAS1 INTO BNYDE008 AT END SET SW-SI-FIN-ALTAS1 TO TRUE SET FIN-PROCESO TO TRUE MOVE HIGH-VALUES TO CLAVE-ALTAS1 NOT AT END ADD CN-UNO TO CONT-ALTAS1 SET SW-NO-FIN-ALTAS1 TO TRUE MOVE BNYDE008-IDEMPR TO IDEMPR-ALTAS1 MOVE BNYDE008-IDCENT TO IDCENT-ALTAS1 MOVE BNYDE008-IDPROD TO IDPROD-ALTAS1 MOVE BNYDE008-IDCONTRN TO IDCONTR-ALTAS1 END-READ IF FS-ALTAS1 NOT EQUAL CA-FICH-OK AND NOT EQUAL CA-FIN-FICH MOVE CA-LEER-ALTAS1 TO WK-PARRAFO MOVE CA-ALTAS1 TO WK-DDNAME MOVE FS-ALTAS1 TO WK-FILE-STATUS MOVE CLAVE-ALTAS1 TO WK-DATOS-REGISTRO 41

42 MOVE CA-ERROR-LECTURA TO WK-DESCRIPCION PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF LEER-FICH-ALTAS1-EXIT. EXIT. ************************************************************************************* * 9200-LEER-FICH-CONTBA3 * * SE REALIZA LA LECTURA DEL FICHERO CONTBA3, ACUMULANDO LAS * ESTADÖSTICAS Y TRATANDO SI PROCEDE UN POSIBLE ERROR EN LA * LECTURA ************************************************************************************** 9200-LEER-FICH-CONTBA3. READ CONTBA3 INTO LQYCONTL AT END SET SW-SI-FIN-CONTBA3 TO TRUE MOVE HIGH-VALUES TO CLAVE-CONTBA3 NOT AT END ADD CN-UNO TO CONT-CONTBA3 SET SW-NO-FIN-CONTBA3 TO TRUE MOVE LQYCONTL-IDEMPR TO IDEMPR-CONTBA3 MOVE LQYCONTL-IDCENT TO IDCENT-CONTBA3 MOVE LQYCONTL-IDPROD TO IDPROD-CONTBA3 MOVE LQYCONTL-IDCONTR TO IDCONTR-CONTBA3 END-READ IF FS-CONTBA3 MOVE CA-LEER-CONTBA3 MOVE CA-CONTBA3 MOVE FS-CONTBA3 MOVE CLAVE-CONTBA3 MOVE CA-ERROR-LECTURA 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 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 CA-TIPO-ERROR-F MOVE CA-COD-RETORNO MOVE CA-RESPONSABLE TO WK-TIPO-ERROR TO WK-COD-RETORNO TO 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 ERROR-FICHERO-EXIT. EXIT. ************************************************************************************** 42

43 * 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 ERROR-DB2-EXIT. EXIT. ************************************************************************************** * 9500-ESTADISTICAS * * SE MUESTRAN LAS ESTADISTICAS DE REGISTROS LEIDOS Y ESCRITOS ************************************************************************************** 9500-ESTADISTICAS. MOVE CONT-CONTBA3 MOVE CONT-ALTAS1 MOVE CONT-ERRALTA MOVE CONT-SALDO-VALOR-PTM TO WK-CONT-CONTBA3 TO WK-CONT-ALTAS1 TO WK-CONT-ERRALTA TO WK-CONT-SALDO-VALOR-PTM DISPLAY CA-ASTERISCO DISPLAY CA-PROGRAMA-LQBBN01 DISPLAY WK-LECTURAS-CONTBA3 DISPLAY WK-LECTURAS-ALTAS1 DISPLAY WK-ESCRITURAS-ERRALTA DISPLAY WK-ESCRITURAS-SALDO-VALOR-PTM DISPLAY CA-ASTERISCO ESTADISTICAS-EXIT. EXIT. 43

44 8. JCL (JOB CONTROL LANGUAJE) Lenguaje de Control de Trabajos. Es un conjunto de especificaciones que constituyen un lenguaje de programación de tareas para el sistema operativo que gobierna un equipo informático, generalmente un Mainframe. Mediante declaraciones y sentencias de JCL se informa al sistema operativo de las tareas que debe realizar, la secuenciación de las mismas y los contenedores de datos de entrada y salida para cada uno de los trabajos a ejecutar. Nos ayuda a ejecutar programas, definir ficheros, etc dentro del SO de un Mainframe: OS 390. Nos conectaremos a través de la interfaz TSO/ISPF. Proporciona un alto grado de flexibilidad e independencia respecto de la localización física de los ficheros y de los programas. JCL define los requisitos de un trabajo ante el sistema operativo: la información de contabilidad, los programas que hay que ejecutar, la secuencia de ejecución, los ficheros necesarios, el equipo físico (Hw) necesario, la orientación del proceso, etc. JCL tiene 18 tipos de sentencias distintas pero las más importantes y las que nos interesan son: JOB, EXEC Y DD: - JOB: Asigna un nombre al trabajo y suministra información de contabilidad. Puede haber una por trabajo. - EXEC: Ejecuta programas dentro de un JOB. - DD: Data Definition. Define los recursos que va a utilizar el programa, por ejemplo los ficheros. Cada trabajo tiene asignado una clase de ejecución que establece unas prioridades en la cola de ejecución. Las sentencias de control de trabajos eran en un principio fichas perforadas, de ahí que se llame trabajo por lotes al que se ejecuta bajo el control de del JES (subsistema de ejecución de trabajos.) Las sentencias JCL se incluyen en el fichero SPOOL en la cola de entrada. (ver #JCLREPOS) 8.1. Ficheros Seguimos trabajando con ficheros secuenciales. Definición de registros: Registros Lógicos: Es el que mejor se adapta al programa con el que estamos trabajando. Registros Físicos: Es el que mejor le viene a la máquina con la que estemos trabajando VTOC. Tabla de contenido del volumen. La etiqueta de volumen en disco se encuentra en registro 2 de la pista 0. Contiene el nombre del disco e información sobre dónde encontrar la tabla de contenido del volumen (VTOC). El VTOC es el equivalente de Mainframe a la tabla FAT en un computador personal. 44

45 8.3. Ficheros Particionados: PDS. Es una biblioteca para el OS-390 de ficheros secuenciales. Contienen cierto número de miembros (ficheros secuenciales) y un directorio. El directorio está situado en el comienzo del fichero y contiene una entrada para cada miembro. Las entradas están ordenadas alfabéticamente por nombre de miembro Formas de localizar un fichero. Catálogos Hay dos formas posibles: 1. En la descripción de la sentencias DD está el nombre del fichero y su ubicación (unidad y volumen). 2. Por medio de un catálogo, que es un fichero que contiene el nombre de otros ficheros y sus ubicaciones. En la sentencia DD hay un parámetro que se utiliza para este propósito. Una vez creado un fichero, se puede almacenar información sobre él en un catálogo. Siempre hay un catálogo disponible en cualquier sistema, el denominando catálogo maestro, que es para ficheros del sistema Lenguaje de Control de Trabajos. Sintaxis. Campos de las sentencias JCL: Identificador Nombre Operación Parámetros // Campo delimitador de una sentencia, estando ambas barras en las dos primeras columnas. // * Continuación de una sentencia en la siguiente línea. NOMBRES-SENTENCIAS: Han de ser como máximo 8 caracteres alfanuméricos más y $, y no pueden comenzar por un número. Cada sentencia JCL debe estar en mayúsculas Sentencia JOB // NOMBREJOB JOB parámetros_posicionales: (p1,p2,p3) param_palabra_ clave, campo contabilidad, programador La sentencia JOB indica el comienzo de un trabajo e indica al sistema cómo procesarlo. Es necesaria y debe ser la primera en cada trabajo. Parámetros de palabra clave en la sentencia JOB: MSGLEVEL(A,B) Indica si se han de imprimir o no las sentencias de JCL y los mensajes de asignación de recursos en el fichero de actividad del trabajo (job log). A: Sentencias JCL. B: Mensajes A: 0 JOB B: O NADA 1 JOB, EXEC, DD + procedim. 1 SMS, JES, RACF 2 JOB, EXEC, DD 45

46 MSGCLASS Asigna el fichero de actividad del trabajo a una clase de salida. (spool) CLASS Asigna el trabajo a una clase. CLASS=A Clase de Ejecución. NOTIFY Solicita que, cuando el trabajo finalice, el sistema envíe un mensaje al ID de usuario de TSO especificado. NOTIFY=&SYSUID TIME Especifica la longitud máxima de tiempo durante la cual un trabajo o un paso de trabajo utilizarán el procesador. El tiempo de procesador utilizado se indica mediante mensajes. Con este parámetro podemos evitar que un proceso batch que se quede bloqueado, ocupe recursos del sistema por un tiempo indefinido. TYPRUN Se usa para solicitar un tipo de procesamiento especial para el trabajo. TYPRUN=SCAN. RESTART Se usa para rearrancar un trabajo, comenzando desde un paso especificado y saltando los pasos anteriores o comenzando desde el punto de comprobación. RESTART=NombrePaso. REGION Se usa para especificar la cantidad máxima de espacio de memoria que puede usar un trabajo. COND O IF/END/ELSE Podemos establecer condiciones para que un trabajo se ejecute o no Sentencia DD // NOMBREDD DD parámetros_posicionales parámetros_palabra_clave Los programas referencian NOMBRESDD (definición de datos): COBOL JCL SELECT PEDIDOS //BE05R JOB CLASS= ASSIGN TO PEDIDOS //* //INFPEDID EXEC PGM=DEMOPROG //PEDIDOS DD DSN=PEDIDOS.DIC,DISP=SHR //INFORME DD SYSOUT=X ( SPOOL) //* El NOMBREDD es un nombre lógico. Un nombre de fichero (data set name es el nombre de un fichero físico (en cinta, disco, etc). La salida puede enviarse a un spool en lugar de enviarse a un fichero. La sentencia DD establece el enlace entre un nombre de DD lógico y un fichero o spool físico. Parámetros posicionales: 46

47 *: Definimos un fichero incorporado. Podemos escribir en las líneas de debajo el contenido del fichero. Cierre? : /* DATA: Igual que la anterior, pero podemos incluir sentencias JCL. Cuando nosotros creamos un trabajo lo hacemos dentro de un fichero. DUMMI: Todas las operaciones de E/S deben pasarse por alto, y la asignación de dispositivos, la asignación de espacio y la disposición de ficheros deben ignorarse. Define un fichero ficticio. Es una especie de comodín. //NOMBREDD DD [* / DATA] (DATOS) /* ó //* ó //(fin de datos) //NOMBRE DD DUMMY Parámetros de palabra clave: DSN Especifica el nombre de un fichero. Ha de tener las mismas condiciones que los nombres en JOB y EXEC para un nombre de fichero simple, aunque también puede haber nombres de ficheros compuestos, que tendrán como máximo 44 caracteres (incluyendo los puntos): T FICHERO.COBOL. No es muy práctico utilizar nombres simples de fichero en un entorno con muchos ficheros. Suelen utilizarse nombres compuestos. Además, un nombre de fichero con un único calificador se catalogará en el catálogo maestro, situación que se debe evitar a toda costa. Cada nombre debe ser único cuando se utiliza el catálogo. Un miembro de un fichero particionado puede utilizarse como si fuera un fichero secuencial poniendo el nombre de miembro entre paréntesis. Dentro de un fichero PDS (biblioteca), tenemos también ficheros secuenciales llamados miembros. Así se referencia un miembro: DSN=T FICHERO.COBOL(MIEMBRO1). FICHEROS TEMPORALES: Los nombres de fichero temporal suelen usarse para especificar al sistema ficheros de trabajo. El sistema borrará los fichros temporales una vez terminado el trabajo, ya sea de forma normal o anormal. DSN=&&NOMBRE ó DSN=, Si omitimos el parámetro DSN de la sentencia DD será el sistema quien asignará un nombre. Es posible hacer referencia a un fichero después de su primera utilización en el trabajo. Para ello, debe hacerse referencia a una sentencia DD anterior que identifique el fichero. //TRABAJO1 JOB //PASO1 EXEC //FICH1 DD DSN=FICHERO //FICH2 DD DSN=*.FICH1 //PASO2 EXEC //FICH3 DD DSN=*.PASO1.FICH1 Con el * se hace referencia a algo anterior. Así podemos acceder a FICH1 del paso anterior, porque al llegar al final del paso1 el fichero se libera. 47

48 DISP Indica la disposición del fichero. Puede estar creado o ser nuevo, podemos compartirlo o no DISP=(ESTADO INICIAL, TERMINACIÓN NORMAL, TERMINACIÓN ANORMAL) =(NEW,DELETE,DELETE) =(OLD,KEEP,KEEP) =(SHR,CATLG,CATLG) =(MOD,PASS,UNCATLG) Todos los subparámetros del parámetro DISP son posicionales. ESTADO INICIAL: Es el estado actual del fichero: - NEW se usa cuando el fichero aún no existe y debe crearse en este paso. - OLD se usa cuando el fichero ya existe y el trabajo lo debe utilizar de forma exclusiva. - SHR se usa cuando el fichero ya existe y puede ser compartido por varios trabajos. Otro usuario lo puede utilizar en otro trabajo mientras que con OLD lo abrimos de forma exclusiva. - MOD se usa cuando deben añadirse nuevos datos detrás de los ya existentes en un fichero secuencial. Si el fichero aún no existe, MOD equivaldrá a NEW. TERMINACIÓN NORMAL: Indica la disposición del fichero cuando el paso finaliza de manera normal. TERMINACIÓN ANORMAL: Indica la disposición del fichero cuando el paso finaliza de manera anormal (ABEND). - DELETE: Borra el fichero. También desaparece su nombre del catálogo. - KEEP: Mantiene el fichero y lo guarda - CATLG: Cataloga el fichero. Si se trata de ficheros permanentes, suele utilizarse siempre CATLG cuando hay que crearlos. Los ficheros que ya están catalogados no necesitan (ni pueden) volverse a catalogar. - UNCATLG: Descataloga el fichero. El nombre del fichero se elimina del catálogo, pero el fichero no se borra de su volumen. - PASS: Se utiliza cuando un fichero temporal debe transferirse a otro paso del trabajo. - Nota: Si se intenta catalogar un nuevo fichero con el mismo nombre que uno ya catalogado, el sistema se negará a hacerlo y en el fichero de actividad del trabajo (job log) aparecerá el mensaje de error NOT CATALOGUED. No obstante, el sistema creará el fichero y lo situará en un volumen alternativo. El acceso sólo será posible mediante la VTOC. Si no se indica el parámetro DISP, por defecto tomará los valores: DISP(NEW,DELETE,DELETE) Crearía un fichero temporal que al termino del trabajo se borraría. Usos más frecuentes de DISP: DISP=SHR Toma como valor por omisión SHR,KEEP,KEEP. Se usa par afichero s ya existentes compartidos con otros usuarios.. DISP=OLD OLD,KEEP,KEEP. Se usa para ficheros ya existentes que no se comparten con otros usuarios. DISP=(,CATLG,DELETE) NEW,CATLG,DELETE. Se usa para crear nuevos ficheros permanentes. Éstos siempre deben catalogarse. DISP=(OLD,DELETE,KEEP) Se usa para eliminar un fichero existente que ya no se necesita. Su nombre se elimina automáticamente del catálogo. 48

49 UNIT Hacemos referencia a la unidad en la que está o queremos que se guarde el fichero. Aquí entra en juego el subsistema SMS. Si sabemos que SMS está activado, UNIT se puede omitir ya que SMS se encargará de guardar el fichero donde le interese independientemente de lo que nosotros le indiquemos en este parámetro. UNIT=TAPE UNIT=SYSDA =SYSALLDA VOL VOL=SER=EDPAK5 SER sería el número de serie =REF=NOMBREFICH <<Una unidad es física, y un volumen es lógica. Mi HD sería la unidad y una partición sería un volumen>> DCB Bloque de Control de Datos. FORMATO DEL REGISTRO LG DEL REGISTRO TAMAÑO BLOQUE DCB=(RECFM=(F,FB,V,VB,V), LRECL=80, BLKSIZE=3600) SPACE SPACE=(TipoUnidad(TRK,CYL, ), (PQ,SQ,DIR), RLE (Defragmentar o comprimir)) DIR: Número de bloques de directorio. Suele ser cercano a los 5 miembros. Si lo indicamos estamos creando un PDS. SYSOUT Hacemos referencia a una clase de salida. SYSOUT =* JOB MSGCLASS=X Sentencia EXEC // NOMBRE-PASO EXEC parámetros_posicionales parámetros_palabra_clave Cada paso del trabajo empieza con una sentencia EXEC que, o bien indica el programa que se desea ejecutar, o bien invoca un procedimiento catalogado o incorporado. Es necesaria una sentencia EXEC para cada paso del trabajo. Un trabajo puede tener como máximo 255 pasos. Parámetros posicionales: NOMBRE DEL PROGRAMA Proporciona el nombre del programa que se ejecutará. //PASO1 EXEC PGM=LQBBN01 NOMBRE DEL PROCEDIMIENTO Identifica el procedimiento que se llamará y se ejecutará. //PASO1 EXEC PROC=BASICJCL //PASO1 EXECE BASICJCL Parámetros de palabra Clave: 49

50 ACCT Especifica información de contabilidad para este paso ADDRSPC Indica el tipo de memoria para este paso (virtual o real) COND Indica la comprobación del código de retorno que se utiliza para determinar si este paso debe ejecutarse o no. Tiene la misma utilidad que en el JOB pero a nivel local en el EXEC, y en caso de que esté definido también en el JOB, es el de éste el que manda. DPRTY Asigna una prioridad de despacho para el espacio de direcciones DYNAMNBR Mantiene un número de asignaciones de ficheros para su reutilización PARM Transfiere información variable al programa en proceso. PERFORM Indica el grupo de rendimiento que se utiliza en este paso. RD Indica si el operador debe ejecutar el rearranque automático del paso si éste falla REGION Especifica en megaoctetos o kiloctetos la cantidad de espacio que puede utilizar este paso. Tiene la misma utilidad que en el JOB pero a nivel local en el EXEC, y en caso de que esté definido también en el JOB, es el de éste el que manda. TIME Indica el tiempo máximo que el paso puede utilizar el procesador. Tiene la misma utilidad que en el JOB pero a nivel local en el EXEC, y en caso de que esté definido también en el JOB, es el de éste el que manda Utilidades de JCL Son programas internos dentro del SO. Un conjunto de programas codificados y comprobados que realizan una serie de funciones útiles. Ayudan a la organización y el mantenimiento de los datos. Las ejecutaremos dentro del EXEC, dentro de la ejecución de cada paso. Los programas de utilidad se controlan mediante dos tipos de sentencias: - Sentencias de JCL - Sentencias d Utilidad. Las sentencias de control de utilidades NO EMPIEZAN con //. Deben codificarse desde la columna 2 hasta la 71 (ambas inclusive). Si una sentencia sobrepasa la columna 71, se utilizan las reglas sobre continuación de sentencias: 1- interrumpir la sentencia en una coma 2- teclear un carácter (que no sea espacio en blanco) en la columna continuar la sentencia empezando en la columna 16 de la línea siguiente. 50

51 La sentencia de control de utilidades se codifica inmediatamente después de la sentencia //SYSIN DD * (el asterisco se puede sustituir por el DATA) /* IEHLIST Lista los directorios de un fichero particionado o bien los contenidos de la tabla de un volumen: VTOC. //PASO1 EXEC PGM=IEHLIST //* Sentencia DD que suele estar en la mayoría de los programas de //* utilidades. En SYSOUT indicamos la clase de salida de los mensajes //* de utilidad //SYSPRINT DD SYSOUT=* //NOMBRE1 DD VOL=, UNIT=, DISP=SHR, //SYSIN DD * LISTPDS DSNAME=NOMBREFICHERO,VOL=Dispositivo=num-serie,FORMATO Ó LISTVTOC DSNAME=NOMBREFICHERO,VOL=Dispositivo=num-serie,FORMATO /* LISTPDS lista el directorio de un PDS, donde pueden observarse los miembros del fichero LISVTOC lista la VTOC completa de un volumen en un disco o parte de la misma. El formato será DUMP (Hexadecimal) por defecto o FORMAT (Saca listado legible). IEBGENER Se utiliza sobretodo para crear, copiar o imprimir ficheros secuenciales y particionados. Copia datos de un dispositivo a otro, crea un PDS a partir de un fichero secuencial, amplía o incorpora miembros a un PDS, crea ficheros editados, cambia la distribución en bloques o modifica las longitudes de registro lógico de un fichero //PASO1 EXEC PGM=IEBGENER //* Sentencia DD que suele estar en la mayoría de los programas de //* utilidades. En SYSOUT indicamos la clase de salida de los mensajes //* de utilidad //SYSPRINT DD SYSOUT=* //SYSUT1 DD //SYSUT2 DD //SYSIN DD * SENTENCIA DE CONTROL DE UTILIDAD /* SYSUT1 define el fichero de entrada, SYSUT2 define el fichero de salida, SYSIN define la entrada de las sentencias de control de la utilidad. La sentencia SYSIN DD puede codificarse como DUMMY si el programa (IEBGENER) NO REQUIERE EDICIÓN. Ejemplo: //SYSIN DD DUMMY. Si se codifica la sentencia SYSIN DD como DUMMY, todo el fichero de ENTRADA se copia secuencialmente. La sentencia SYSUT2 describe el fichero de salida y puede codificarse como salida en fichas, salida impresa, un fichero secuencial o un fichero particionado. Podemos desfragmentar (comprimir) un fichero poniendo como ficheros de entrada y salida los mismos ficheros: //SYSUT1 DD DSN=FICH1 //SYSUT2 DD DSN=FICH1 51

52 Sólo usamos las sentencias de control de utilidades de IEBGENER cuando el fichero no existe y lo creamos directamente: //SYSUT1 DD DSN=FICH1 //SYSUT2 DD DSN=NOMBRE.PDS, DISP=SHR, //SYSIN DD * GENERATE MAXNAME=1 NÚMERO DE MIEMBROS MEMBERNAME=MIEMBRO NOMBRES DE LOS MIEMBROS /* IEBCOPY Nos va a servir para copiar miembros de particionados a otro PDS o para fusionarlos, para copiar de un PDS a un secuencial (descarga), copia de uno o más ficheros secuenciales creados por una operación de descarga a un PDS(carga) y compresión de un PDS: copiándolo sobre sí mismo. //PASO1 EXEC PGM=IEBCOPY //* Sentencia DD que suele estar en la mayoría de los programas de //* utilidades. En SYSOUT indicamos la clase de salida de los mensajes //* de utilidad //SYSPRINT DD SYSOUT=* //NOMBRE1 DD FICHERO DE ENTRADA //NOMBRE2 DD //NOMBREN DD FICHEROS TEMPORALES. //SYSIN DD * COPY OUTDD=NOMBRE1 NOMBRE DEL FICHERO DE SALIDA INDD=(ONMBREDD,(NOMBREDD,R), ) FICHEROS DE ENTRADA. SELECT MEMBER=(NOMBRE1,NOMBRE2, ) EXCLUDE MEMBER=(NOMBRE1,NOMBRE2, ) O PONEMOS UN U OTRA, LOS QUE QUEREMOS COPIAR, O LOS QUE NO. /* IEBCOMPR Nos va a servir par acomparar 2 ficheros, tanto 2 secuenciales como 2 particionados (SYSUT1 Y SYSUT2). Dos ficheros secuenciales los comparamos directamente. En el caso de los PDS no mira el contenido de los miembros, sino el de los directorios. Por tanto para IEBCOMPR, F1 y F2 son iguales independientemente del contenido de los miembros. IEFBR14 Este programa no hace nada en particular. Es un COMODÍN. Ejemplo: imaginemos que queremos crear un fichero en un paso y no queremos que haga nada más: //PASO1 EXEC PGM=IEFBR14 //FICHERO1 DD DSN=FICHERO,DISP=, JCL no nos dejaría poner esta sentencia sola. Para ello necesitaríamos meterla en un paso. Usamos nuestro comodín que no hace nada. DFSORT MERGE, SORT. Fusionamos y ordenamos ficheros. //PASO1 EXEC PGM=MERGE ó SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN= fichero a ordenar 52

53 //SORTIN2 DD. PODEMOS ORDENAR HASTA 16 FICHEROS //SORTIN16 DD //SORTOUT DD DSN=fichero de salida ficheros de trabajo --- //SYSIN DD * sentencias de control /* Sentencias de control: incluimos una serie de campos por los que queremos que ordene y que se incluyan en el fichero de salida: SORT FIELDS=( Pos inicial, longitud, tipodato, orden (A,D)) MERGE FIELDS=( ) INCLUDE FIELDS=( ) OMIT FIELDS=( ) INCLUDE COND=(Pos inicial, longitud, tipodato, operador, valor) Operador: eq, neq, gt, lt, ngt, nlt DFDSS Herramienta de gestión de espacio de datos en Disco. Sentencias: COMPRESS, COPY, DUMP, RELEASE, RESTORE Sentencias avanzadas JCL. CONCATENACIÓN DE FICHEROS Concatenación es la agrupación de un conjunto de ficheros independientes en un único fichero lógico. REGLAS DE CONCATENACIÓN Ficheros secuenciales como máximo - 16 ficheros particionados como máximo - Los ficheros particionados no pueden mezclarse con los secuenciales. - Los miembros de los ficheros particionados se consideran ficheros secuenciales. - El formato de registro (RECFM) debe ser el mismo en todos los ficheros que se concatenan. - El tamaño de bloque (BLKSIZE) no tiene por qué ser el mismo en todos los ficheros, pero deberá especificarse en primer lugar el fichero con el mayor tamaño de bloque. - En ficheros de formato de registro variable, la longitud de registro lógico (LRECL) no tiene por qué ser la misma para todos los ficheros, pero deberá especificarse en primer lugar el fichero que tenga la mayor longitud de registro lógico. - Nota: los dos puntos anteriores no suponen conflicto. En caso de que el fichero con el mayor BLKSIZE no coincida con el de mayor LRECL, se especifica en primer lugar el de mayor BLKSIZE y se le asigna la mayor de las LRECL (aunque no sea la suya). 53

54 EDUC.C EDUC.B EDUC.A [EDUC.A EDUC.B EDUC.C] 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

55 ANEXOS ANEXO A: Notas y apuntes sobre COBOL y codificación. Los grupos de datos en COBOL son ALFANUMÉRICOS (Caracteres). Un número NO se puede mover a un alfanumérico, pero sí a un grupo, con lo que así podríamos hacer una conversión de NÚMERO a ALFANUMÉRICO declarando el alfanumérico como numérico dentro del grupo y con el mismo tamaño, pero ocpuamos 2 zonas distintas de memoria REDEFINE. Ambas variables apuntan a la misma zona de memoria. Ha de ir a continuación de la variable que se redefine. 05 A PIC X(10) 05 B REDEFINES A PIC 9(10) Usando los REDEFINES se pueden crear COPYS con diferentes esctructuras redefiniendo siempre la anterior estructura con el mismo tamaño. Para realizar la operación contraria, es decir, mover un ALFANUMÉRICO a un NUMÉRICO o compacto, definimos también un grupo. Ejemplo: mover BNYDE008-FECAPER FEC-VALOR-TRA(1 1) X(10) 9(8) * FECAPER-NUM PIC X(8). 01 FECAPER-COMP3 REDEFINES FECAPER-NUM. 05 FECAPER-FECHA PIC 9(8). * MOVE BNYDE008-FECAPER(1:4) TO FECAPER-NUM(1:4) MOVE BNYDE008-FECAPER(6:2) TO FECAPER-NUM(5:2) MOVE BNYDE008-FECAPER(9:2) TO FECAPER-NUM(7:2) * MOVE FECAPER-FECHA TO FEC-VALOR-TRA(1) Para CREAR una tabla de una Base de Datos, modificamos el DCLGEN de la tabla, quitando la parte de COBOL y quedándonos con la de DB2, y podemos crear un nuevo fichero CREATAB.SQL cambiando los NOT NULL por NOT NULL WITH DEFAULT. Otra manera sería idéntica pero usando el SCRIPT del centro del mandatos e insertando la sentencia SQL (CREATE TABLE NombreDCLGEN), usando también la DCLGEN. Para INSERTAR valores en la tabla, tenemos también dos opciones. O nos creamos un fichero INSERT.SQL donde generamos la sentencia SQL del INSERT (copiaríamos la parte de la tabla de la DCLGEN y daríamos valores a los campos que nos interesase), o En el centro de mandatos, pinchamos en la pestaña INTERACTIVOS / SQL ASSIST, seleccionamos la opción INICIAR / INSERT, y en la pestaña TABLAS seleccionamos la tabla en la que queremos insertar. Por último vamos a la pestaña INSERTAR donde ya nos aparecen todos los campos de la tabla. De esta manera además se controla la cantidad y tipo de valores al insertar. Cuando la casilla de relleno se pone de color rojo significa que nos hemos excedido en la longitud del campo. 55

56 Otra buena idea a la hora de probar el programa es crear una tabla auxiliar con otro nombre, copia de la que usemos para copiando dicha tabla después de cada ejecución que nos cambie los valores de la tabla, o bien usar en el código la sentencia ROLLBACK que vuelve las tablas a su estado inicial tras la ejecución de un proceso. Para crear FICHEROS usamos un programa llamado SPFPC.EXE. Los caracteres de las cadenas se introducen tal cual, y para los compactos ha de tenerse en cuenta que ocupan: PARES: (Nº Cifras / 2) + 1 IMPARES: (Nº Cifras + 1) / 2 Los pares comienzan por 0 y los impares NO. Ejemplo: 45 y 345. Cifras pares Cifras impares C 4 C La C siempre ha de acabar abajo. Si tuviésemos un fichero de entrada cuya COPY tuviese muchos campos y la mayoría de ellos fuesen COMP -3, resultaría tedioso insertar de esta manera varios registros en el fichero para hacer las pruebas. Para ello bastaría con generar otro proyecto con un pequeño programa que declarase un fichero de salida, escribiese uno o varios registros en él, y lo cerrase. Ese fichero de salida sería el fichero de entrada que usase nuestro programa. Esta operación no requiere mucho esfuerzo desde el momento que podemos coger la COPY del fichero para hacer los MOVE... TO. Así controlaríamos mucho mejor lo que insertamos en cada registro y dónde lo insertamos. Nosotros ponemos valores numéricos y el programa nos los escribe como COMP-3. 56

57 ANEXO 1: Listado de FILE STATUS Código Significado 00 No hay información adicional 02 La sentencia READ fue ejecutada satisfactoriamente, pero fue detectada una clave duplicada. 04 La sentencia READ fue ejecutada satisfactoriamente, pero el largo de registro procesado no corresponde 05 Una sentencia OPEN es ejecutada satisfactoriamente, pero el archivo referenciado no es está presente al momento de ejecutar el OPEN. Si el modo de apertura es I-O o EXTEND, el archivo se creará 10 Una sentencia secuencial READ fue intentada y no existe otro registro lógico en el archivo porque ha sido encontrado el fin de archivo. 12 Extensión IBM. No se encontró un registro de Subfile modificado 14 Una sentencia READ secuencial fue intentada para un archivo relativo y el número de dígitos significativos en el número relativo de registro fue más largo que el tamaño del ítem de datos de la clave relativa descrita para el archivo 21 Existe un error de secuencia para un archivo indexado accesado secuencialmente. El valor de la clave de registro ha sido cambiada por el programa entre la ejecución satisfactoria de una sentencia READ y la ejecución de la siguiente sentencia REWRITE para el archivo, o los requerimientos de orden ascendente para los valores claves de registro fueron violados. 22 Se intentó escribir un registro que creará una clave duplicada en un archivo relativo; o se intentó escribir o sebreescribir (WRITE/REWRITE) un registro que creará una clave de registro principal duplicada en un archivo indexado. CPF4759, CPF5008, CPF5026, CPF5034, CPF5084, CPF Se intentó hacer un acceso directo (Random) a un registro que no existe en el archivo. CPF5001, CPF5006, CPF5013, CPF5020, CPF Se intentó realizar una escritura más allá de los límites definidos externamente para un archivo relativo o indexado. Una sentencia secuencial WRITE fue intentada para un archivo relativo y el número de dígitos significativos en el número relativo de registro era más largo que el tamaño de la clave de registro relativo descrito para el archivo. CPF5006, CPF5018, CPF5021, CPF5043, CPF

58 30 No hay información adicional. CPF4192, CPF5101, CPF102, CPF5129, CPF5030, CPF Existe un error permanente porque existe una violación, se intentó escribir más allá de los límite definidos externamente para un archivo secuencial. CPF5116, CPF5018, CPF5272, sí la organización es secuencial. 35 Se intentó una sentencia OPEN con la frase INPUT, I-O o EXTEND sobre un archivo no opcional que no está presente. CPF4101, CPF4102, CPF Se intento una sentencia OPEN sobre un archivo que no soporta el modo de apertura especificado en la sentencia OPEN. Posibles Violaciones son: La frase EXTEND o OUTPUT fue especificada pero el archivo no soporta operaciones de escritura. La frase I-O fue especificada pero el archivo no soporta las operaciones de entrada y salida permitidas. La frase INPUT fue especificada pero el archivo no soporta las operaciones de lectura. 38 Se intentó una sentencia OPEN sobre un archivo cerrado previamente con bloqueo (lock). 39 La sentencia OPEN no fue ejecutada satisfactoriamente debido a un conflicto entre los atributos del archivo físico y los atributos especificados para ése archivo en el programa. Comprobar error de nivel para el archivo. CPF Se intentó una sentencia OPEN para el archivo en el modo de apertura. 42 Se intentó una sentencia CLOSE para un archivo que no está abierto. 43 Para un archivo secuencial, en el modo acceso secuencial, la última sentencia de entrada salida ejecutada para el archivo asociado previa a la ejecución de una sentencia REWRITE???. Para archivos relativos e indexados en el modo de acceso secuencial, la última sentencia de entrada-salida ejecutada para el archivo.???. 44 Una violación de??, existe porque se intento sobreescribir un registro en el archivo y el registro no es del mismo tamaño que el registro a reemplazar. 46 Se intentó una sentencia secuencial READ sobre un archivo que está abierto en el modo I-O sin haber establecido un registro válido debido a que la sentencia start no se ejecutó con éxito, la sentencia READ precedente fue insatisfactoria o causa una 58

59 condición AT END. CPF5001, CPF5025, CPF La ejecución de una sentencia READ o START fuen intentada sobre un archivo que no está abierto en el modo INPUT o I-O. 48 La ejecución de una sentencia WRITE fue intentada sobre un archivo que no está abierto en el modo I-O, OUTPUT o EXTEND. 49 La ejecución de una sentencia DELETE o REWRITE fue intentada sobre un archivo que no está abiertoen el modo I-O. 90 Otros errores: Archivo no encontrado. Miembro no encontrado. Falta exepciones I-O. CPF4101, CPF4102, CPF4103 si un USE es aplicable para el archivo (sobre un no opcional con OPEN OUTPUT). Las siguientes excepciones se monitora genéricamente : CPF4101 al CPF4399 CPF4501 al CPF4699 CPF4701 al CPF4899 CPF4901 al CPF4999 CPF5001 al CPF5099 CPF5101 al CPF5399 CPF5501 al CPF5699 Estas excepciones causan un FILE STATUS = 90. Si un procedimiento USE es aplicable, se ejecuta. De otra manera, el programa termina y entrega al operador la excepción y la opción de cancelar, vaciado parcial o vaciado total de variables. 91 Tipo de acceso no definido o no autorizado. CPF2207, CPF4104, CPF4236, CPF5057, CPF5109, CPF5134, CPF Error lógico: Archivo bloqueado El archivo ya está abierto I-O para un archivo cerrado READ después de fin de archivo 59

60 CLOSE para un archivo ya cerrado CPF4106, CPF4132, CPF4740, CPF5013, CPF5067, CPF5070, CPF5119, CPF5145, CPF5146, CPF5149, CPF5176, CPF El archivo esta en conflicto con otro usuario. 94??? y la última operación no fue un READ satisfactorio. 95 Información del archivo inválido o incompleta. Se especifican claves duplicadas en el programa COBOL. El archivo ha sido abierto satisfactoriamente pero el archivo indexado de base de datos fue creado con clave única; o No se especificó clave duplicada en el programa COBOL, y el archivo de base de datos fue creado permitiendo claves duplicadas. 98 Grave errór interno en la estructura del fichero, generalmente se suelen provocar cuando hay un corte eléctrico o una salida brusca del programa y algún fichero indexado se ha quedado abierto, lo que suele ocurrir es problema de correspondencia entre claves y datos, se recomienda hacerle un RECOBERY (RM/COBOL) o el que corresponda a cada compilador para rehacer las claves. En algunos casos, es posible que éste error se deba a un problema físico del disco, en ese caso también será conveniente copiarlo en otro sitio "físico" 99 Al borrar, leer o reescribir un registro que está siendo bloqueado por otro usuario. 9 A El trabajo a sido cancelado de una manera controlada por comandos CL, CNLJOB, TRMSBS, TRMCPF, PWRDWNSYS. CPF4741 Se ha enviado un mensaje de escape durante una operación de entrada READ desde dispositivo de programa 9 C Falla de adquisición, la sección no ha partido o conectado. 9 D El registro está bloqueado CPF5027, CPF G Excepción de salida para dispositivo o sesión 9 H Operación ACQUIRE fallida.? Apropiado por otro programa o inhabilitado. (9H es el resultado cuando una operación ACQUIRE causa cualquiera de las excepciones monitoreadas para 90 o 9N cuando ocurre. 9 I Operación WRITE fallida CPF4702, CPF4737, CPF5052, CPF

61 9 K Nombre de formato inválido, formato no encontrado CPF5022, CPF5023, CPF5053, CPF5054, CPF5121, CPF5152, CPF5153, CPF5186, CPF M Último registro escrito en Subfile CPF N Error temporal de I-O en hardware (potencialmente recuperable). Error durante la sesión de comunicaciones. CPF4145, CPF4146, CPF4193, CPF4229, CPF 4291, CPF4299, CPF4354, CPF4354, CPF4526, CPF4542, CPF5477, CPF4592, CPF4602, CPF4603, CPF4611, CPF4612, CPF4616, CPF4617, CPF4622, CPF4623, CPF4624, CPF4624, CPF4625, CPF4628, CPF4629, CPF4630, CPF4631, CPF4632, CPF4705, CPF5107, CPF5128, CPF5166, CPF5198, CPF5280, CPF5280, CPF5282, CPF5287, CPF5293, CPF5352, CPF5353, CPF5517, CPF5524, CPF5529, CPF5530, CPF5532, CPF P Open falló porque el archivo no puede ser ubicado bajo control??? CPF4293, CPF4326, CPF4327, CPF4328, CPF

62 ANEXO 2: Tutorial de los SQLCODES y sus causas Cuando ejecutamos un programa que usa SQL, DB2 nos devuelve un SQLCODE que nos informa si nuestro código SQL se ejecutó correctamente o no. Estos son los SQLCODES más comunes que puede devolver DB2 tras la ejecución de sentencias SQL: SQLCODE +100 SQLSTATE SQLCODE -102 String constant is too long SQLCODE -117 The number of values you are trying to INSERT does not match the number of columns SQLCODE -180 SQLSTATE Bad data in Date/Time/Timestamp String representation of DATE, TIME, TIMESTAMP is invalid SQLCODE -181 SQLSTATE Bad data in Date/Time/Timestamp Value for DATE, TIME, TIMESTAMP is invalid SQLCODE -199 Illegal use of the specified keyword. SQLCODE -204 Object not defined to DB2 SQLCODE -205 Column name not in specified table SQLCODE -206 Column does not exist in any table in the SELECT SQLCODE -216 You need to use the same number of expressions on both sides of the comparison. when using multiple operands in a comparison, Correct example: WHERE (E.SALARY, E.COMM) IN (SELECT S.PAY, S.COMMISSION Incorrect example: SQLCODE +222 Trying to fetch a row that fell through a DELETE hole SQLCODE +223 Trying to fetch a row that fell through an UPDATE hole SQLCODE -224 FETCH cannot make an INSENSITIVE cursor SENSITIVE SQLCODE -229 The locale specified in a SET LOCALE statement was not found. SQLCODE +231 FETCH but you did a BEFORE or AFTER and you are not on a valid row SQLCODE +304 Value cannot be assigned to this host variable because it is out of range SQLCODE -305 Null indicator needed SQLCODE -311 Varchar, insert or update. You didn t set the -LEN field with the right data length SQLCODE -482 he procedure returned no locators SQLCODE -501 Cursor not open on FETCH SQLCODE -502 Opening cursor that is already open SQLCODE -503 Updating column which needs to be specified in FOR UPDATE OF SQLCODE -530 SQLSTATE Referential integrity prevents the INSERT/UPDATE SQLCODE -532 SQLSTATE Referential integrity (DELETE RESTRICT rule) prevents the DELETE SQLCODE -536 SQLSTATE Referential integrity (DELETE RESTRICT rule) prevents the DELETE 62

63 SQLCODE -545 SQLSTATE 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 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 Unavailable resource. Someone is locking the data you need you may choose to terminate the program SQLCODE -911 SQLSTATE Deadlock or timeout. Rollback has been done. SQLCODE -913 SQLSTATE Your program was the victim of a deadlock or timeout. NO rollback has been done. You should do a ROLLBACK. SQLCODE -922 Authorization needed SQLCODE -927 The language interface was called but no connection had been *************************************************************************************** SQLCODE -991, Error: CALL ATTACH WAS UNABLE TO ESTABLISH AN IMPLICIT CONNECT OR OPEN TO DB2. RC1= RC2= SQLCODE -981, Error: THE SQL STATEMENT FAILED BECAUSE THE RRSAF CONNECTION IS NOT IN A STATE THAT ALLOWS SQL OPERATIONS, REASON SQLCODE -950, Error: THE LOCATION NAME SPECIFIED IN THE CONNECT STATEMENT IS INVALID OR NOT LISTED IN THE COMMUNICATIONS DATABASE SQLCODE -948, Error: DISTRIBUTED OPERATION IS INVALID SQLCODE -947, Error: THE SQL STATEMENT FAILED BECAUSE IT WILL CHANGE A TABLE DEFINED WITH DATA CAPTURE CHANGES, BUT THE DATA CANNOT BE PROPAGATED SQLCODE -939, Error: ROLLBACK REQUIRED DUE TO UNREQUESTED ROLLBACK OF A REMOTE SERVER SQLCODE -929, Error: FAILURE IN A CHANGED DATA CAPTURE EXIT: SQLCODE -927, Error: THE LANGUAGE INTERFACE (LI) WAS CALLED WHEN THE CONNECTING ENVIRONMENT WAS NOT ESTABLISHED. THE PROGRAM SHOULD BE INVOKED UNDER THE DSN COMMAND SQLCODE -926, Error: ROLLBACK NOT VALID IN IMS OR CICS ENVIRONMENT SQLCODE -925, Error: COMMIT NOT VALID IN IMS OR CICS ENVIRONMENT SQLCODE -924, Error: DB2 CONNECTION INTERNAL ERROR,,, SQLCODE -923, Error: CONNECTION NOT ESTABLISHED: DB2, REASON, TYPE, NAME SQLCODE -922, Error: AUTHORIZATION FAILURE: ERROR. REASON SQLCODE -919, Error: A ROLLBACK OPERATION IS REQUIRED 63

64 SQLCODE -918, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE A CONNECTION HAS BEEN LOST SQLCODE -917, Error: BIND PACKAGE FAILED SQLCODE -913, Error: UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON CODE, TYPE OF RESOURCE, AND RESOURCE NAME SQLCODE -911, Error: THE CURRENT UNIT OF WORK HAS BEEN ROLLED BACK DUE TO DEADLOCK OR TIMEOUT. REASON, TYPE OF RESOURCE, AND RESOURCE NAME SQLCODE -910, Error: THE SQL STATEMENT CANNOT ACCESS AN OBJECT ON WHICH A DROP OR ALTER IS PENDING SQLCODE -909, Error: THE OBJECT HAS BEEN DELETED OR ALTERED SQLCODE -908, Error: ERROR USING AUTHORITY. BIND, REBIND, OR AUTO-REBIND OPERATION IS NOT ALLOWED 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 -902, Error: POINTER TO ESSENTIAL CONTROL BLOCK(RDA/CT) HAS VALUE 0, REBIND REQUIRED SQLCODE -901, Error: UNSUCCESSFUL EXECUTION CAUSED BY A SYSTEM ERROR THAT DOES NOT PRECLUDE THE SUCCESSFUL EXECUTION OF SUBSEQUENT SQL STATEMENTS SQLCODE -900, Error: THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THE APPLICATION PROCESS IS NOT CONNECTED TO AN APPLICATION SERVER SQLCODE -882, Error: SAVEPOINT DOES NOT EXIST SQLCODE -881, Error: A SAVEPOINT WITH NAME ALREADY EXISTS, BUT THIS SAVEPOINT NAME CANNOT BE REUSED SQLCODE -880, Error: SAVEPOINT DOES NOT EXIST OR IS INVALID IN THIS CONTEXT SQLCODE -879, Error: CREATE OR ALTER STATEMENT FOR CANNOT DEFINE A COLUMN, DISTINCT TYPE, FUNCTION OR STORED PROCEDURE PARAMETER AS MIXED OR GRAPHIC WITH ENCODING SCHEME SQLCODE -878, Error: THE PLAN_TABLE USED FOR EXPLAIN CANNOT BE ASCII SQLCODE -877, Error: CCSID ASCII IS NOT ALLOWED FOR THIS DATABASE OR TABLE SPACE SQLCODE -876, Error: CANNOT BE CREATED, REASON SQLCODE -875, Error: CANNOT BE USED WITH THE ASCII DATA REFERENCED SQLCODE -874, Error: THE ENCODING SCHEME SPECIFIED FOR THE MUST BE THE SAME AS 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

65 SQLCODE -846, Error: INVALID SPECIFICATION OF AN IDENTITY COLUMN SQLCODE -843, Error: THE SET CONNECTION OR RELEASE STATEMENT MUST SPECIFY AN EXISTING CONNECTION SQLCODE -842, Error: A CONNECTION TO x ALREADY EXISTS SQLCODE -840, Error: TOO MANY ITEMS RETURNED IN A SELECT OR INSERT LIST SQLCODE -822, Error: THE SQLDA CONTAINS AN INVALID DATA ADDRESS OR INDICATOR VARIABLE ADDRESS SQLCODE -820, Error: THE SQL STATEMENT CANNOT BE PROCESSED BECAUSE CONTAINS A VALUE 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 IN THE LOAD MODULE IS DIFFERENT FROM THE BIND TIMESTAMP BUILT FROM THE DBRM 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 -808, Error: THE CONNECT STATEMENT IS NOT CONSISTENT WITH THE FIRST CONNECT STATEMENT SQLCODE -807, Error: ACCESS DENIED: PACKAGE IS NOT ENABLED FOR ACCESS FROM SQLCODE -805, Error: DBRM OR PACKAGE NAME NOT FOUND IN PLAN. REASON SQLCODE -804, Error: AN ERROR WAS FOUND IN THE APPLICATION PROGRAM INPUT PARAMETERS FOR THE SQL STATEMENT, REASON SQLCODE -803, Error: AN INSERTED OR UPDATED VALUE IS INVALID BECAUSE INDEX IN INDEX SPACE CONSTRAINS COLUMNS OF THE TABLE SO NO TWO ROWS CAN CONTAIN DUPLICATE VALUES IN THOSE COLUMNS. RID OF EXISTING ROW IS X'' SQLCODE -802, Error: EXCEPTION ERROR HAS OCCURRED DURING OPERATION ON DATA, POSITION SQLCODE -798, Error: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME SQLCODE -797, Error: ATTEMPT TO CREATE TRIGGER WITH AN UNSUPPORTED TRIGGERED SQL STATEMENT SQLCODE -771, Error: INVALID SPECIFICATION OF A ROWID COLUMN SQLCODE -770, Error: TABLE CANNOT HAVE A LOB COLUMN UNLESS IT ALSO HAS A ROWID COLUMN SQLCODE -769, Error: SPECIFICATION OF CREATE AUX TABLE DOES NOT MATCH THE CHARACTERISTICS OF THE BASE TABLE SQLCODE -768, Error: AN AUXILIARY TABLE ALREADY EXISTS FOR THE SPECIFIED COLUMN OR PARTITION 65

66 SQLCODE -767, Error: MISSING OR INVALID COLUMN SPECIFICATION FOR INDEX SQLCODE -766, Error: THE OBJECT OF A STATEMENT IS AN AUXILIARY TABLE FOR WHICH THE REQUESTED OPERATION IS NOT PERMITTED SQLCODE -765, Error: TABLE IS NOT COMPATIBLE WITH DATABASE SQLCODE -764, Error: A LOB TABLE SPACE AND ITS ASSOCIATED BASE TABLE SPACE MUST BE IN THE SAME DATABASE SQLCODE -763, Error: INVALID TABLE SPACE NAME SQLCODE -752, Error: THE CONNECT STATEMENT IS INVALID BECAUSE THE PROCESS IS NOT IN THE CONNECTABLE STATE SQLCODE -751, Error: (SPECIFIC NAME ) ATTEMPTED TO EXECUTE AN SQL STATEMENT THAT IS NOT ALLOWED SQLCODE -750, Error: THE SOURCE TABLE CANNOT BE RENAMED BECAUSE IT IS REFERENCED IN EXISTING VIEW DEFINITIONS OR TRIGGER DEFINITIONS SQLCODE -748, Error: AN INDEX ALREADY EXISTS ON AUXILIARY TABLE SQLCODE -747, Error: TABLE IS NOT AVAILABLE UNTIL THE AUXILIARY TABLES AND INDEXES FOR ITS EXTERNALLY STORED COLUMNS HAVE BEEN CREATED SQLCODE -746, Error: THE SQL STATEMENT IN AN EXTERNAL FUNCTION, TRIGGER, OR IN STORED PROCEDURE VIOLATES THE NESTING SQL RESTRICTION SQLCODE -742, Error: DSNDB07 IS THE IMPLICIT WORK FILE DATABASE SQLCODE -741, Error: A DATABASE IS ALREADY DEFINED FOR MEMBER SQLCODE -740, Error: FUNCTION IS DEFINED WITH THE OPTION MODIFIES SQL DATA WHICH IS NOT VALID IN THE CONTEXT IN WHICH IT WAS INVOKED SQLCODE -739, Error: ALTER FUNCTION FAILED BECAUSE FUNCTIONS CANNOT MODIFY DATA WHEN THEY ARE PROCESSED IN PARALLEL SQLCODE -737, Error: IMPLICIT TABLE SPACE NOT ALLOWED SQLCODE -736, Error: INVALID OBID SPECIFIED SQLCODE -735, Error: DATABASE CANNOT BE ACCESSED BECAUSE IT IS NO LONGER A SHARED DATABASE 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 SQLCODE -726, Error: BIND ERROR ATTEMPTING TO REPLACE PACKAGE =. THERE ARE ENABLE OR DISABLE ENTRIES 66

67 CURRENTLY ASSOCIATED WITH THE PACKAGE SQLCODE -725, Error: THE SPECIAL REGISTER AT LOCATION WAS SUPPLIED AN INVALID VALUE SQLCODE -724, Error: THE ACTIVATION OF THE OBJECT WOULD EXCEED THE MAXIMUM LEVEL OF INDIRECT SQL CASCADING SQLCODE -723, Error: AN ERROR OCCURRED IN A TRIGGERED SQL STATEMENT IN TRIGGER, SECTION NUMBER. INFORMATION RETURNED: SQLCODE, SQLSTATE, AND MESSAGE TOKENS SQLCODE -722, Error: ERROR USING AUTHORITY PACKAGE DOES NOT EXIST SQLCODE -721, Error: BIND ERROR FOR PACKAGE = CONTOKEN = ''X IS NOT UNIQUE SO IT CANNOT BE CREATED SQLCODE -720, Error: BIND ERROR, ATTEMPTING TO REPLACE PACKAGE = WITH VERSION = BUT THIS VERSION ALREADY EXISTS SQLCODE -719, Error: BIND ADD ERROR USING AUTHORITY PACKAGE ALREADY EXISTS SQLCODE -718, Error: REBIND OF PACKAGE FAILED BECAUSE IBMREQD OF IS INVALID SQLCODE -717, Error: FOR WITH MARK FAILED BECAUSE DEPENDS ON FUNCTIONS OF THE RELEASE FROM WHICH FALLBACK HAS OCCURRED SQLCODE -716, Error: PROGRAM PRECOMPILED WITH INCORRECT LEVEL FOR THIS RELEASE SQLCODE -715, Error: PROGRAM WITH MARK FAILED BECAUSE IT DEPENDS ON FUNCTIONS OF THE RELEASE FROM WHICH FALLBACK HAS OCCURRED SQLCODE -713, Error: THE REPLACEMENT VALUE FOR IS INVALID SQLCODE -697, Error: OLD OR NEW CORRELATION NAMES ARE NOT ALLOWED IN A TRIGGER DEFINED WITH THE FOR EACH STATEMENT CLAUSE. OLD_TABLE OR NEW_TABLE NAMES ARE NOT ALLOWED IN A TRIGGER WITH THE BEFORE CLAUSE SQLCODE -696, Error: THE DEFINITION OF TRIGGER INCLUDES AN INVALID USE OF CORRELATION NAME OR TRANSITION TABLE NAME. REASON CODE= SQLCODE -694, Error: THE DDL STATEMENT CANNOT BE EXECUTED BECAUSE A DROP IS PENDING ON THE DDL REGISTRATION TABLE SQLCODE -693, Error: THE COLUMN IN DDL REGISTRATION TABLE OR INDEX IS NOT DEFINED PROPERLY SQLCODE -692, Error: THE REQUIRED UNIQUE INDEX FOR DDL REGISTRATION TABLE DOES NOT EXIST SQLCODE -691, Error: THE REQUIRED REGISTRATION TABLE DOES NOT EXIST SQLCODE -690, Error: THE STATEMENT IS REJECTED BY DATA DEFINITION CONTROL SUPPORT. REASON SQLCODE -689, Error: TOO MANY COLUMNS DEFINED FOR A DEPENDENT TABLE SQLCODE -688, Error: INCORRECT DATA RETURNED FROM FIELD PROCEDURE,, SQLCODE -687, Error: FIELD TYPES INCOMPARABLE SQLCODE -686, Error: COLUMN DEFINED WITH A FIELD PROCEDURE CAN NOT COMPARE WITH ANOTHER COLUMN WITH DIFFERENT FIELD PROCEDURE SQLCODE -685, Error: INVALID FIELD TYPE, SQLCODE -684, Error: THE LENGTH OF LITERAL LIST BEGINNING IS TOO LONG SQLCODE -683, Error: THE SPECIFICATION FOR COLUMN, DISTINCT TYPE, FUNCTION, OR PROCEDURE CONTAINS INCOMPATIBLE CLAUSES SQLCODE -682, Error: FIELD PROCEDURE COULD NOT BE LOADED 67

68 SQLCODE -681, Error: COLUMN IN VIOLATION OF INSTALLATION DEFINED FIELD PROCEDURE RT:, RS:, MSG: SQLCODE -680, Error: TOO MANY COLUMNS SPECIFIED FOR A TABLE, VIEW, OR TABLE FUNCTION SQLCODE -679, Error: THE OBJECT CANNOT BE CREATED BECAUSE A DROP IS PENDING ON THE OBJECT SQLCODE -678, Error: THE LITERAL SPECIFIED FOR THE INDEX LIMIT KEY MUST CONFORM TO THE DATA TYPE OF THE CORRESPONDING COLUMN SQLCODE -677, Error: INSUFFICIENT VIRTUAL STORAGE FOR BUFFERPOOL EXPANSION SQLCODE -676, Error: ONLY A 4K PAGE BUFFERPOOL CAN BE USED FOR AN INDEX SQLCODE -672, Error: OPERATION DROP NOT ALLOWED ON TABLE SQLCODE -671, Error: THE BUFFERPOOL ATTRIBUTE OF THE TABLE SPACE CANNOT BE ALTERED AS SPECIFIED BECAUSE IT WOULD CHANGE THE PAGE SIZE OF THE TABLE SPACE SQLCODE -670, Error: THE RECORD LENGTH OF THE TABLE EXCEEDS THE PAGE SIZE LIMIT SQLCODE -669, Error: A TABLE IN A PARTITIONED TABLE SPACE CANNOT BE EXPLICITLY DROPPED SQLCODE -668, Error: THE COLUMN CANNOT BE ADDED TO THE TABLE BECAUSE THE TABLE HAS AN EDIT PROCEDURE SQLCODE -667, Error: THE CLUSTERING INDEX FOR A PARTITIONED TABLE SPACE CANNOT BE EXPLICITLY DROPPED SQLCODE -666, Error: CANNOT BE EXECUTED BECAUSE IS IN PROGRESS SQLCODE -665, Error: THE PART CLAUSE OF AN ALTER STATEMENT IS OMITTED OR INVALID SQLCODE -663, Error: THE NUMBER OF KEY LIMIT VALUES IS EITHER ZERO, OR GREATER THAN THE NUMBER OF COLUMNS IN THE KEY OF INDEX SQLCODE -662, Error: A PARTITIONED INDEX CANNOT BE CREATED ON A NON-PARTITIONED TABLE SPACE SQLCODE -661, Error: INDEX CANNOT BE CREATED ON PARTITIONED TABLE SPACE BECAUSE THE NUMBER OF PART SPECIFICATIONS IS NOT EQUAL TO THE NUMBER OF PARTITIONS OF THE TABLE SPACE SQLCODE -660, Error: INDEX CANNOT BE CREATED ON PARTITIONED TABLE SPACE x BECAUSE KEY LIMITS ARE NOT SPECIFIED SQLCODE -658, Error: A CANNOT BE DROPPED USING THE STATEMENT SQLCODE -655, Error: THE CREATE OR ALTER STOGROUP IS INVALID BECAUSE THE STORAGE GROUP WOULD HAVE BOTH SPECIFIC AND NON-SPECIFIC VOLUME IDS SQLCODE -653, Error: TABLE IN PARTITIONED TABLE SPACE IS NOT AVAILABLE BECAUSE ITS PARTITIONED INDEX HAS NOT BEEN CREATED SQLCODE -652, Error: VIOLATION OF INSTALLATION DEFINED EDIT OR VALIDATION PROCEDURE SQLCODE -651, Error: TABLE DESCRIPTION EXCEEDS MAXIMUM SIZE OF OBJECT DESCRIPTOR SQLCODE -650, Error: THE ALTER INDEX CANNOT BE EXECUTED, REASON SQLCODE -647, Error: BUFFERPOOL CANNOT BE SPECIFIED BECAUSE IT HAS NOT BEEN ACTIVATED SQLCODE -646, Error: TABLE CANNOT BE CREATED IN SPECIFIED TABLE SPACE BECAUSE IT ALREADY CONTAINS A TABLE SQLCODE -644, Error: INVALID VALUE SPECIFIED FOR KEYWORD IN STATEMENT SQLCODE -643, Error: CHECK CONSTRAINT EXCEEDS MAXIMUM ALLOWABLE LENGTH 68

69 SQLCODE -642, Error: TOO MANY COLUMNS IN UNIQUE CONSTRAINTS SQLCODE -640, Error: LOCKSIZE ROW CANNOT BE SPECIFIED BECAUSE TABLE IN THIS TABLESPACE HAS TYPE 1 INDEX SQLCODE -639, Error: A NULLABLE COLUMN OF A FOREIGN KEY WITH A DELETE RULE OF SET NULL CANNOT BE A COLUMN OF THE KEY OF A PARTITIONED INDEX SQLCODE -638, Error: TABLE CANNOT BE CREATED BECAUSE COLUMN DEFINITION IS MISSING SQLCODE -637, Error: DUPLICATE KEYWORD SQLCODE -636, Error: THE PARTITIONING KEYS FOR PARTITION ARE NOT SPECIFIED IN ASCENDING OR DESCENDING ORDER SQLCODE -635, Error: THE DELETE RULES CANNOT BE DIFFERENT OR CANNOT BE SET NULL SQLCODE -634, Error: THE DELETE RULE MUST NOT BE CASCADE SQLCODE -633, Error: THE DELETE RULE MUST BE SQLCODE -632, Error: THE TABLE CANNOT BE DEFINED AS A DEPENDENT OF BECAUSE OF DELETE RULE RESTRICTIONS SQLCODE -631, Error: FOREIGN KEY IS TOO LONG OR HAS TOO MANY COLUMNS SQLCODE -630, Error: THE WHERE NOT NULL SPECIFICATION IS INVALID FOR TYPE 1 INDEXES SQLCODE -629, Error: SET NULL CANNOT BE SPECIFIED BECAUSE FOREIGN KEY CANNOT CONTAIN NULL VALUES SQLCODE -628, Error: THE CLAUSES ARE MUTUALLY EXCLUSIVE SQLCODE -627, Error: THE ALTER STATEMENT IS INVALID BECAUSE THE PAGESET HAS USER- MANAGED DATA SETS SQLCODE -626, Error: THE ALTER STATEMENT IS NOT EXECUTABLE BECAUSE THE PAGE SET IS NOT STOPPED SQLCODE -625, Error: TABLE DOES NOT HAVE AN INDEX TO ENFORCE THE UNIQUENESS OF THE PARENT KEY SQLCODE -624, Error: TABLE ALREADY HAS A PRIMARY KEY SQLCODE -623, Error: A CLUSTERING INDEX ALREADY EXISTS ON TABLE SQLCODE -622, Error: FOR MIXED DATA IS INVALID BECAUSE THE MIXED DATA INSTALL OPTION IS NO SQLCODE -621, Error: DUPLICATE DBID WAS DETECTED AND PREVIOUSLY ASSIGNED TO SQLCODE -620, Error: KEYWORD IN STATEMENT IS NOT PERMITTED FOR A SPACE IN THE DATABASE SQLCODE -619, Error: OPERATION DISALLOWED BECAUSE THE WORK FILE DATABASE IS NOT STOPPED SQLCODE -618, Error: OPERATION IS NOT ALLOWED ON SYSTEM DATABASES SQLCODE -617, Error: A TYPE 1 INDEX IS NOT VALID FOR TABLE SQLCODE -616, Error: CANNOT BE DROPPED BECAUSE IT IS REFERENCED BY SQLCODE -615, Error: IS NOT ALLOWED ON A PACKAGE IN USE 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

70 SQLCODE -612, Error: IS A DUPLICATE COLUMN NAME SQLCODE -611, Error: ONLY LOCKMAX 0 CAN BE SPECIFIED WHEN THE LOCK SIZE OF THE TABLESPACE IS TABLESPACE OR TABLE SQLCODE -607, Error: OPERATION OR OPTION IS NOT DEFINED FOR THIS OBJECT SQLCODE -604, Error: A DATA TYPE DEFINITION SPECIFIES AN INVALID LENGTH, PRECISION, OR SCALE ATTRIBUTE SQLCODE -603, Error: A UNIQUE INDEX CANNOT BE CREATED BECAUSE THE TABLE CONTAINS ROWS WHICH ARE DUPLICATES WITH RESPECT TO THE VALUES OF THE IDENTIFIED COLUMNS SQLCODE -602, Error: TOO MANY COLUMNS SPECIFIED IN A CREATE INDEX SQLCODE -601, Error: THE NAME OF THE OBJECT TO BE CREATED OR THE TARGET OF A RENAME STATEMENT IS IDENTICAL TO THE EXISTING NAME OF THE OBJECT TYPE SQLCODE -594, Error: ATTEMPT TO CREATE A NULLABLE ROWID OR DISTINCT TYPE COLUMN SQLCODE -593, Error: NOT NULL MUST BE SPECIFIED FOR ROWID OR DISTINCT TYPE COLUMN SQLCODE -592, Error: NOT AUTHORIZED TO CREATE FUNCTIONS OR PROCEDURES IN WLM ENVIRONMENT SQLCODE -590, Error: PARAMETER NAME IS NOT UNIQUE IN THE CREATE FOR ROUTINE SQLCODE -586, Error: THE TOTAL LENGTH OF THE CURRENT PATH SPECIAL REGISTER CANNOT EXCEED 254 CHARACTERS SQLCODE -585, Error: THE SCHEMA NAME CANNOT APPEAR MORE THAN ONCE IN THE CURRENT PATH 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 -573, Error: TABLE DOES NOT HAVE A UNIQUE KEY WITH THE SPECIFIED COLUMN NAMES SQLCODE -571, Error: THE STATEMENT WOULD RESULT IN A MULTIPLE SITE UPDATE SQLCODE -567, Error: AUTHORIZATION ERROR USING AUTHORITY PACKAGE = PRIVILEGE = SQLCODE -559, Error: ALL AUTHORIZATION FUNCTIONS HAVE BEEN DISABLED SQLCODE -558, Error: INVALID CLAUSE OR COMBINATION OF CLAUSES ON A GRANT OR REVOKE SQLCODE -557, Error: INCONSISTENT GRANT/REVOKE KEYWORD. PERMITTED KEYWORDS ARE SQLCODE -556, Error: CANNOT HAVE THE PRIVILEGE REVOKED BY BECAUSE THE REVOKEE DOES NOT POSSESS THE PRIVILEGE OR THE REVOKER DID NOT MAKE THE GRANT SQLCODE -555, Error: AN AUTHORIZATION ID CANNOT REVOKE A PRIVILEGE FROM ITSELF SQLCODE -554, Error: AN AUTHORIZATION ID CANNOT GRANT A PRIVILEGE TO ITSELF 70

71 SQLCODE -553, Error: SPECIFIED IS NOT ONE OF THE VALID AUTHORIZATION IDS SQLCODE -552, Error: DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION SQLCODE -551, Error: DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION ON OBJECT SQLCODE -549, Error: THE STATEMENT IS NOT ALLOWED FOR BECAUSE THE BIND OPTION DYNAMICRULES(RUN) IS NOT IN EFFECT FOR SQLCODE -548, Error: A CHECK CONSTRAINT THAT IS DEFINED WITH IS INVALID SQLCODE -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 IS INCOMPLETE BECAUSE IT LACKS A PRIMARY INDEX OR A REQUIRED UNIQUE INDEX SQLCODE -539, Error: TABLE DOES NOT HAVE A PRIMARY KEY SQLCODE -538, Error: FOREIGN KEY DOES NOT CONFORM TO THE DESCRIPTION OF A PARENT KEY OF TABLE 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 CAN BE AFFECTED BY THE OPERATION SQLCODE -534, Error: THE PRIMARY KEY CANNOT BE UPDATED BECAUSE OF MULTIPLE-ROW UPDATE SQLCODE -533, Error: INVALID MULTIPLE-ROW INSERT SQLCODE -532, Error: THE RELATIONSHIP RESTRICTS THE DELETION OF ROW WITH RID X'' SQLCODE -531, Error: PARENT KEY IN A PARENT ROW CANNOT BE UPDATED BECAUSE IT HAS ONE OR MORE DEPENDENT ROWS IN RELATIONSHIP SQLCODE -530, Error: THE INSERT OR UPDATE VALUE OF FOREIGN KEY IS INVALID SQLCODE -526, Error: THE REQUESTED OPERATION OR USAGE DOES NOT APPLY TO TEMPORARY TABLE 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 -518, Error: THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED STATEMENT SQLCODE -517, Error: CURSOR CANNOT BE USED BECAUSE ITS STATEMENT NAME DOES NOT IDENTIFY A PREPARED SELECT STATEMENT SQLCODE -516, Error: THE DESCRIBE FOR STATIC STATEMENT DOES NOT IDENTIFY A PREPARED STATEMENT SQLCODE -514, Error: THE CURSOR IS NOT IN A PREPARED STATE SQLCODE -513, Error: THE ALIAS MUST NOT BE DEFINED ON ANOTHER LOCAL OR REMOTE ALIAS 71

72 SQLCODE -512, Error: STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID SQLCODE -511, Error: THE FOR UPDATE CLAUSE CANNOT BE SPECIFIED BECAUSE THE TABLE DESIGNATED BY THE CURSOR CANNOT BE MODIFIED SQLCODE -510, Error: THE TABLE DESIGNATED BY THE CURSOR OF THE UPDATE OR DELETE STATEMENT CANNOT BE MODIFIED SQLCODE -509, Error: THE TABLE IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT THE SAME TABLE DESIGNATED BY THE CURSOR SQLCODE -508, Error: THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT POSITIONED ON A ROW SQLCODE -507, Error: THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT OPEN SQLCODE -504, Error: THE CURSOR NAME IS NOT DEFINED SQLCODE -503, Error: A COLUMN CANNOT BE UPDATED BECAUSE IT IS NOT IDENTIFIED IN THE UPDATE CLAUSE OF THE SELECT STATEMENT OF THE CURSOR SQLCODE -502, Error: THE CURSOR IDENTIFIED IN AN OPEN STATEMENT IS ALREADY OPEN SQLCODE -501, Error: THE CURSOR IDENTIFIED IN A FETCH OR CLOSE STATEMENT IS NOT OPEN SQLCODE -500, Error: THE IDENTIFIED CURSOR WAS CLOSED WHEN THE CONNECTION WAS DESTROYED SQLCODE -499, Error: CURSOR HAS ALREADY BEEN ASSIGNED TO THIS OR ANOTHER RESULT SET FROM PROCEDURE SQLCODE -497, Error: THE MAXIMUM LIMIT OF INTERNAL IDENTIFIERS HAS BEEN EXCEEDED FOR DATABASE 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 HAS A PROBLEM WITH PARAMETER NUMBER. IT MAY INVOLVE A MISMATCH WITH A SOURCE FUNCTION 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 DIRECTLY SPECIFIED IN AN SQL STATEMENT IS OUTSIDE THE RANGE OF ALLOWABLE VALUES IN THIS CONTEXT (, ) 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 STATEMENT, THE NUMBER OF PARAMETERS DOES NOT MATCH THE NUMBER OF PARAMETERS OF THE SOURCE FUNCTION SQLCODE -482, Error: THE PROCEDURE RETURNED NO LOCATORS SQLCODE -480, Error: THE PROCEDURE HAS NOT YET BEEN CALLED SQLCODE -478, Error: DROP OR REVOKE ON OBJECT TYPE CANNOT BE PROCESSED BECAUSE OBJECT OF TYPE IS DEPENDENT ON IT 72

73 SQLCODE -476, Error: REFERENCE TO FUNCTION WAS NAMED WITHOUT A SIGNATURE, BUT THE FUNCTION IS NOT UNIQUE WITHIN ITS SCHEMA SQLCODE -475, Error: THE RESULT TYPE OF THE SOURCE FUNCTION CANNOT BE CAST TO THE RETURNS TYPE OF THE USER-DEFINED FUNCTION SQLCODE -473, Error: A USER DEFINED DATA TYPE CANNOT BE CALLED THE SAME NAME AS A SYSTEM PREDEFINED TYPE (BUILT-IN TYPE) SQLCODE -472, Error: CURSOR WAS LEFT OPEN BY EXTERNAL FUNCTION (SPECIFIC NAME ) SQLCODE -471, Error: INVOCATION OF FUNCTION OR PROCEDURE FAILED DUE TO REASON SQLCODE -470, Error: SQL CALL STATEMENT SPECIFIED A NULL VALUE FOR INPUT PARAMETER, BUT THE STORED PROCEDURE DOES NOT SUPPORT NULL VALUES SQLCODE -469, Error: SQL CALL STATEMENT MUST SPECIFY AN OUTPUT HOST VARIABLE FOR PARAMETER SQLCODE -463, Error: EXTERNAL FUNCTION (SPECIFIC NAME ) HAS RETURNED AN INVALID SQLSTATE, WITH DIAGNOSTIC TEXT SQLCODE -461, Error: A VALUE WITH DATA TYPE CANNOT BE CAST TO TYPE SQLCODE -458, Error: IN A REFERENCE TO FUNCTION BY SIGNATURE, A MATCHING FUNCTION COULD NOT BE FOUND SQLCODE -457, Error: A FUNCTION OR DISTINCT TYPE CANNOT BE CALLED SINCE IT IS RESERVED FOR SYSTEM USE SQLCODE -456, Error: IN CREATE FUNCTION FOR, THE SPECIFIC NAME ALREADY EXISTS IN THE SCHEMA SQLCODE -455, Error: IN CREATE FUNCTION FOR, THE SCHEMA NAME PROVIDED FOR THE SPECIFIC NAME DOES NOT MATCH THE SCHEMA NAME OF THE FUNCTION 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 CONTAINS DATA TYPE WHICH IS NOT APPROPRIATE FOR AN EXTERNAL FUNCTION WRITTEN IN THE GIVEN LANGUAGE 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 CONTAINS AN INVALID FORMAT OF THE EXTERNAL NAME CLAUSE OR IS MISSING THE EXTERNAL NAME CLAUSE SQLCODE -444, Error: USER PROGRAM COULD NOT BE FOUND SQLCODE -443, Error: EXTERNAL FUNCTION (SPECIFIC NAME ) HAS RETURNED AN ERROR SQLSTATE WITH DIAGNOSTIC TEXT SQLCODE -441, Error: INVALID USE OF 'DISTINCT' OR 'ALL' WITH SCALAR FUNCTION SQLCODE -440, Error: NO BY THE NAME HAVING COMPATIBLE ARGUMENTS WAS FOUND IN THE CURRENT PATH SQLCODE -438, Error: APPLICATION RAISED ERROR WITH DIAGNOSTIC TEXT: SQLCODE -435, Error: AN INVALID SQLSTATE IS SPECIFIED IN THE FUNCTION RAISE_ERROR OR IN A SIGNAL SQLSTATE STATEMENT 73

74 SQLCODE -433, Error: VALUE IS TOO LONG SQLCODE -430, ERROR: (SPECIFIC NAME ) HAS ABNORMALLY TERMINATED SQLCODE -427, Error: DYNAMIC ROLLBACK NOT VALID AT AN APPLICATION SERVER WHERE UPDATES ARE NOT ALLOWED SQLCODE -426, Error: DYNAMIC COMMIT NOT VALID AT AN APPLICATION SERVER WHERE UPDATES ARE NOT ALLOWED SQLCODE -423, Error: INVALID VALUE FOR LOCATOR IN POSITION SQLCODE -421, Error: THE OPERANDS OF A UNION OR UNION ALL DO NOT HAVE THE SAME NUMBER OF COLUMNS SQLCODE -420, Error: THE VALUE OF A CHARACTER STRING ARGUMENT WAS NOT ACCEPTABLE TO THE FUNCTION SQLCODE -419, Error: A DECIMAL DIVIDE OPERATION IS INVALID BECAUSE THE RESULT WOULD HAVE A NEGATIVE SCALE SQLCODE -418, Error: A STATEMENT STRING TO BE PREPARED CONTAINS AN INVALID USE OF PARAMETER MARKERS SQLCODE -417, Error: A STATEMENT STRING TO BE PREPARED INCLUDES PARAMETER MARKERS AS THE OPERANDS OF THE SAME OPERATOR SQLCODE -416, Error: AN OPERAND OF A UNION CONTAINS A LONG STRING COLUMN SQLCODE -415, Error: THE CORRESPONDING COLUMNS,, OF THE OPERANDS OF A UNION OR A UNION ALL DO NOT HAVE COMPARABLE COLUMN DESCRIPTIONS SQLCODE -414, Error: A LIKE PREDICATE IS INVALID BECAUSE THE FIRST OPERAND IS NOT A STRING SQLCODE -413, Error: OVERFLOW OCCURRED DURING NUMERIC DATA TYPE CONVERSION SQLCODE -412, Error: THE SELECT CLAUSE OF A SUBQUERY SPECIFIES MULTIPLE COLUMNS SQLCODE -411, Error: CURRENT SQLID CANNOT BE USED IN A STATEMENT THAT REFERENCES REMOTE OBJECTS SQLCODE -410, Error: THE FLOATING POINT LITERAL CONTAINS MORE THAN 30 CHARACTERS SQLCODE -409, Error: INVALID OPERAND OF A COUNT FUNCTION SQLCODE -408, Error: THE VALUE IS NOT COMPATIBLE WITH THE DATA TYPE OF ITS TARGET SQLCODE -407, Error: AN UPDATE, INSERT, OR SET VALUE IS NULL, BUT THE OBJECT COLUMN CANNOT CONTAIN NULL VALUES SQLCODE -406, Error: A CALCULATED OR DERIVED NUMERIC VALUE IS NOT WITHIN THE RANGE OF ITS OBJECT COLUMN SQLCODE -405, Error: THE NUMERIC LITERAL CANNOT BE USED AS SPECIFIED BECAUSE IT IS OUT OF RANGE SQLCODE -404, Error: THE SQL STATEMENT SPECIFIES A STRING THAT IS TOO LONG SQLCODE -402, Error: AN ARITHMETIC FUNCTION OR OPERATOR IS APPLIED TO CHARACTER OR DATETIME DATA SQLCODE -401, Error: THE OPERANDS OF AN ARITHMETIC OR COMPARISON OPERATION ARE NOT COMPARABLE SQLCODE -400, Error: THE CATALOG HAS THE MAXIMUM NUMBER OF USER DEFINED INDEXES SQLCODE -399, Error: ATTEMPTED TO INSERT AN INVALID VALUE INTO A ROWID COLUMN SQLCODE -398, Error: A LOCATOR WAS REQUESTED FOR HOST VARIABLE NUMBER BUT THE VARIABLE IS NOT A LOB 74

75 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 -392, Error: SQLDA PROVIDED FOR CURSOR HAS BEEN CHANGED FROM THE PREVIOUS FETCH SQLCODE -390, Error: THE FUNCTION NAME, SPECIFIC NAME, IS NOT VALID IN THE CONTEXT IN WHICH IT OCCURS SQLCODE -373, Error: DEFAULT CANNOT BE SPECIFIED FOR IDENTITY COLUMN SQLCODE -372, Error: ONLY ONE ROWID OR IDENTITY COLUMN IS ALLOWED IN A TABLE SQLCODE -359, Error: THE RANGE OF VALUES FOR THE IDENTITY COLUMN IS EXHAUSTED SQLCODE -355, Error: A LOB COLUMN IS TOO LARGE TO BE LOGGED SQLCODE -352, Error: AN UNSUPPORTED SQLTYPE WAS ENCOUNTERED IN POSITION OF THE INPUT-LIST SQLCODE -351, Error: AN UNSUPPORTED SQLTYPE WAS ENCOUNTERED IN POSITION OF THE 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. REASON, CHARACTER, HOST VARIABLE 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 IS NEGATIVE OR GREATER THAN THE MAXIMUM SQLCODE -310, Error: DECIMAL HOST VARIABLE OR PARAMETER CONTAINS NON-DECIMAL DATA SQLCODE -309, Error: A PREDICATE IS INVALID BECAUSE A REFERENCED HOST VARIABLE HAS THE NULL VALUE SQLCODE -305, Error: THE NULL VALUE CANNOT BE ASSIGNED TO OUTPUT HOST VARIABLE NUMBER BECAUSE NO INDICATOR VARIABLE IS SPECIFIED SQLCODE -304, Error: A VALUE WITH DATA TYPE CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE THE VALUE IS NOT 75

76 WITHIN THE RANGE OF THE HOST VARIABLE IN POSITION WITH DATA TYPE SQLCODE -303, Error: A VALUE CANNOT BE ASSIGNED TO OUTPUT HOST VARIABLE NUMBER BECAUSE THE DATA TYPES ARE NOT COMPARABLE SQLCODE -302, Error: THE VALUE OF INPUT VARIABLE OR PARAMETER NUMBER IS INVALID OR TOO LARGE FOR THE TARGET COLUMN OR THE TARGET VALUE SQLCODE -301, Error: THE VALUE OF INPUT HOST VARIABLE OR PARAMETER NUMBER CANNOT BE USED AS SPECIFIED BECAUSE OF ITS DATA TYPE SQLCODE -300, Error: THE STRING CONTAINED IN HOST VARIABLE OR PARAMETER IS NOT NUL- TERMINATED SQLCODE -251, Error: TOKEN IS NOT VALID SQLCODE -250, Error: THE LOCAL LOCATION NAME IS NOT DEFINED WHEN PROCESSING A THREE- PART OBJECT NAME SQLCODE -240, Error: THE PART CLAUSE OF A LOCK TABLE STATEMENT IS INVALID SQLCODE -229, Error: THE LOCALE SPECIFIED IN A SET LOCALE OR OTHER STATEMENT THAT IS LOCALE SENSITIVE WAS NOT FOUND SQLCODE -221, Error: "SET OF OPTIONAL COLUMNS" IN EXPLANATION TABLE IS INCOMPLETE. OPTIONAL COLUMN IS MISSING SQLCODE -220, Error: THE COLUMN IN EXPLANATION TABLE IS NOT DEFINED PROPERLY SQLCODE -219, Error: THE REQUIRED EXPLANATION TABLE DOES NOT EXIST SQLCODE -214, Error: AN EXPRESSION STARTING WITH IN THE CLAUSE IS NOT VALID. REASON CODE = SQLCODE -212, Error: IS SPECIFIED MORE THAN ONCE IN THE REFERENCING CLAUSE OF A TRIGGER DEFINITION SQLCODE -208, Error: THE ORDER BY CLAUSE IS INVALID BECAUSE COLUMN IS NOT PART OF 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 -205, Error: IS NOT A COLUMN OF TABLE SQLCODE -204, Error: IS AN UNDEFINED NAME SQLCODE -203, Error: A REFERENCE TO COLUMN IS AMBIGUOUS SQLCODE -199, Error: ILLEGAL USE OF KEYWORD, TOKEN WAS EXPECTED SQLCODE -198, Error: THE OPERAND OF THE PREPARE OR EXECUTE IMMEDIATE STATEMENT IS BLANK OR EMPTY SQLCODE -197, Error: QUALIFIED COLUMN NAMES IN ORDER BY CLAUSE NOT PERMITTED WHEN UNION OR UNION ALL SPECIFIED SQLCODE -191, Error: A STRING CANNOT BE USED BECAUSE IT IS INVALID MIXED DATA SQLCODE -190, Error: ATTRIBUTES OF COLUMN IN TABLE ARE NOT COMPATIBLE WITH THE EXISTING COLUMN SQLCODE -189, Error: CCSID IS UNKNOWN OR INVALID FOR THE DATA TYPE OR SUBTYPE SQLCODE -188, Error: THE STRING REPRESENTATION OF A NAME IS INVALID SQLCODE -187, Error: A REFERENCE TO A CURRENT DATE/TIME SPECIAL REGISTER IS INVALID BECAUSE THE MVS TOD CLOCK IS BAD OR THE MVS PARMTZ IS OUT OF RANGE 76

77 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 -180, Error: THE DATE, TIME, OR TIMESTAMP VALUE IS INVALID SQLCODE -173, Error: UR IS SPECIFIED ON THE WITH CLAUSE BUT THE CURSOR IS NOT READ- ONLY SQLCODE -171, Error: THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT OF IS INVALID SQLCODE -170, Error: THE NUMBER OF ARGUMENTS SPECIFIED FOR IS INVALID SQLCODE -164, Error: DOES NOT HAVE THE PRIVILEGE TO CREATE A VIEW WITH QUALIFICATION SQLCODE -161, Error: THE INSERT OR UPDATE IS NOT ALLOWED BECAUSE A RESULTING ROW DOES NOT SATISFY THE VIEW DEFINITION SQLCODE -160, Error: THE WITH CHECK OPTION CANNOT BE USED FOR THE SPECIFIED VIEW SQLCODE -159, Error: DROP OR COMMENT ON IDENTIFIES A(N) RATHER THAN A(N) SQLCODE -158, Error: THE NUMBER OF COLUMNS SPECIFIED FOR THE VIEW IS NOT THE SAME AS THE NUMBER OF COLUMNS SPECIFIED BY THE SELECT CLAUSE, OR THE NUMBER OF COLUMNS SPECIFIED IN THE CORRELATION CLAUSE IN A FROM CLAUSE IS NOT THE SAME AS THE NUMBER OF COLUMNS IN THE CORRESPONDING TABLE, VIEW, TABLE EXPRESSION, OR TABLE FUNCTION SQLCODE -157, Error: ONLY A TABLE NAME CAN BE SPECIFIED IN A FOREIGN KEY CLAUSE. IS NOT THE NAME OF A TABLE SQLCODE -156, Error: THE STATEMENT DOES NOT IDENTIFY A TABLE SQLCODE -154, Error: THE STATEMENT IS INVALID BECAUSE THE VIEW OR TABLE DEFINITION IS NOT VALID 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 -148, Error: THE SOURCE TABLE CANNOT BE RENAMED OR ALTERED SQLCODE -147, Error: ALTER FUNCTION FAILED BECAUSE SOURCE FUNCTIONS CANNOT BE ALTERED SQLCODE -144, Error: INVALID SECTION NUMBER SQLCODE -142, Error: THE SQL STATEMENT IS NOT SUPPORTED 77

78 SQLCODE -138, Error: THE SECOND OR THIRD ARGUMENT OF THE SUBSTR FUNCTION IS OUT OF RANGE SQLCODE -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 OR AN EXPRESSION OF MAXIMUM LENGTH GREATER THAN 255 SQLCODE -133, Error: A COLUMN FUNCTION IN A SUBQUERY OF A HAVING CLAUSE IS INVALID BECAUSE ALL COLUMN REFERENCES IN ITS ARGUMENT ARE NOT CORRELATED TO THE GROUP BY RESULT THAT THE HAVING CLAUSE IS APPLIED TO SQLCODE -132, Error: AN OPERAND OF x IS NOT VALID SQLCODE -131, Error: STATEMENT WITH LIKE PREDICATE HAS INCOMPATIBLE DATA TYPES SQLCODE -130, Error: THE ESCAPE CLAUSE CONSISTS OF MORE THAN ONE CHARACTER, OR THE STRING PATTERN CONTAINS AN INVALID OCCURRENCE OF THE ESCAPE CHARACTER SQLCODE -129, Error: THE STATEMENT CONTAINS TOO MANY TABLE NAMES SQLCODE -128, Error: INVALID USE OF NULL IN A PREDICATE SQLCODE -127, Error: DISTINCT IS SPECIFIED MORE THAN ONCE IN A SUBSELECT SQLCODE -126, Error: THE SELECT STATEMENT CONTAINS BOTH AN UPDATE CLAUSE AND AN ORDER BY CLAUSE 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 IN THE FUNCTION MUST BE A CONSTANT OR KEYWORD 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 IS FOLLOWED BY A PARENTHESIZED LIST OR BY ANY OR ALL WITHOUT A SUBQUERY SQLCODE -114, Error: THE LOCATION NAME DOES NOT MATCH THE CURRENT SERVER SQLCODE -113, Error: INVALID CHARACTER FOUND IN:. REASON CODE SQLCODE -112, Error: THE OPERAND OF A COLUMN FUNCTION IS ANOTHER COLUMN FUNCTION SQLCODE -111, Error: A COLUMN FUNCTION DOES NOT INCLUDE A COLUMN NAME SQLCODE -110, Error: INVALID HEXADECIMAL LITERAL BEGINNING 78

79 SQLCODE -109, Error: CLAUSE IS NOT PERMITTED SQLCODE -108, Error: THE NAME IS QUALIFIED INCORRECTLY SQLCODE -107, Error: THE NAME IS TOO LONG. MAXIMUM ALLOWABLE SIZE IS SQLCODE -105, Error: INVALID STRING SQLCODE -104, Error: ILLEGAL SYMBOL "". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: SQLCODE -103, Error: IS AN INVALID NUMERIC LITERAL SQLCODE -102, Error: LITERAL STRING IS TOO LONG. STRING BEGINS SQLCODE -101, Error: THE STATEMENT IS TOO LONG OR TOO COMPLEX SQLCODE -097, Error: THE USE OF LONG VARCHAR OR LONG VARGRAPHIC IS NOT ALLOWED IN THIS CONTEXT SQLCODE -084, Error: UNACCEPTABLE SQL STATEMENT SQLCODE -079, Error: QUALIFIER FOR DECLARED GLOBAL TEMPORARY TABLE OR INDEX MUST BE SESSION, NOT SQLCODE -060, Error: INVALID SPECIFICATION : SQLCODE -029, Error: INTO CLAUSE REQUIRED SQLCODE -010, Error: THE STRING CONSTANT BEGINNING IS NOT TERMINATED SQLCODE -007, Error: STATEMENT CONTAINS THE ILLEGAL CHARACTER SQLCODE 000,SUCCESSFUL EXECUTION SQLCODE 012, Warning: THE UNQUALIFIED COLUMN NAME WAS INTERPRETED AS A CORRELATED REFERENCE SQLCODE 098, Warning: A DYNAMIC SQL STATEMENT ENDS WITH A SEMICOLON SQLCODE 100, NOT FOUND:ROW NOT FOUND FOR FETCH, UPDATE, OR DELETE, OR THE RESULT OF A QUERY IS AN EMPTY TABLE SQLCODE 110, Warning: SQL UPDATE TO A DATA CAPTURE TABLE NOT SIGNALED TO ORIGINATING SUBSYSTEM SQLCODE 111, Warning: THE SUBPAGES OPTION IS NOT SUPPORTED FOR TYPE 2 INDEXES SQLCODE 117, Warning: THE NUMBER OF INSERT VALUES IS NOT THE SAME AS THE NUMBER OF OBJECT COLUMNS SQLCODE 162, Warning: TABLE SPACE. HAS BEEN PLACED IN CHECK PENDING SQLCODE 203, Warning: THE QUALIFIED COLUMN NAME WAS RESOLVED USING A NON-UNIQUE OR 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 218, Warning: THE SQL STATEMENT REFERENCING A REMOTE OBJECT CANNOT BE EXPLAINED SQLCODE 219, Warning: THE REQUIRED EXPLANATION TABLE DOES NOT EXIST SQLCODE 220, Warning: THE COLUMN IN EXPLANATION TABLE IS NOT DEFINED PROPERLY SQLCODE 236, Warning: SQLDA INCLUDES SQLVAR ENTRIES, BUT ARE REQUIRED FOR COLUMNS SQLCODE 237, Warning: SQLDA INCLUDES SQLVAR ENTRIES, BUT ARE REQUIRED BECAUSE AT LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A DISTINCT TYPE 79

80 SQLCODE 238, Warning: SQLDA INCLUDES SQLVAR ENTRIES, BUT SQLVAR ENTRIES ARE NEEDED FOR COLUMNS BECAUSE AT LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A LOB SQLCODE 239, Warning: SQLDA INCLUDES SQLVAR ENTRIES, BUT ARE REQUIRED FOR COLUMNS BECAUSE AT LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A DISTINCT TYPE 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 394, Warning: USER SPECIFIED OPTIMIZATION HINTS USED DURING ACCESS PATH SELECTION SQLCODE 395, Warning: USER SPECIFIED OPTIMIZATION HINTS ARE INVALID (REASON CODE = ''). THE OPTIMIZATION HINTS ARE IGNORED SQLCODE 402, Warning: LOCATION IS UNKNOWN SQLCODE 403, Warning: THE LOCAL OBJECT REFERENCED BY THE CREATE ALIAS STATEMENT DOES NOT EXIST SQLCODE 434, Warning: OPTION IS A DEPRECATED FEATURE SQLCODE 445, Warning: VALUE HAS BEEN TRUNCATED SQLCODE 462, Warning: EXTERNAL FUNCTION OR PROCEDURE (SPECIFIC NAME ) HAS RETURNED A WARNING SQLSTATE, WITH DIAGNOSTIC TEXT SQLCODE 464, Warning: PROCEDURE RETURNED QUERY RESULT SETS, WHICH EXCEEDS THE DEFINED LIMIT SQLCODE 466, Warning: PROCEDURE RETURNED QUERY RESULT SETS SQLCODE 494, Warning: NUMBER OF RESULT SETS IS GREATER THAN NUMBER OF LOCATORS SQLCODE 495, Warning: ESTIMATED PROCESSOR COST OF PROCESSOR SECONDS ( SERVICE UNITS) IN COST CATEGORY EXCEEDS A RESOURCE LIMIT WARNING THRESHOLD OF SERVICE UNITS SQLCODE 535, Warning: THE RESULT OF THE POSITIONED UPDATE OR DELETE MAY DEPEND ON THE ORDER OF THE ROWS SQLCODE 541, Warning: THE REFERENTIAL OR UNIQUE CONSTRAINT HAS BEEN IGNORED BECAUSE IT IS A DUPLICATE SQLCODE 551, Warning: DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION ON OBJECT SQLCODE 552, Warning: DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION SQLCODE 558, Warning: THE WITH GRANT OPTION IS IGNORED SQLCODE 561, Warning: THE ALTER, INDEX, REFERENCES, AND TRIGGER PRIVILEGES CANNOT BE GRANTED TO PUBLIC AT ALL LOCATIONS SQLCODE 562, Warning: A GRANT OF A PRIVILEGE WAS IGNORED BECAUSE THE GRANTEE ALREADY HAS THE PRIVILEGE FROM THE GRANTOR SQLCODE 585, Warning: THE SCHEMA NAME APPEARS MORE THAN ONCE IN THE CURRENT PATH SQLCODE 599, Warning: COMPARISON FUNCTIONS ARE NOT CREATED FOR A DISTINCT TYPE BASED ON A LONG STRING DATA TYPE SQLCODE 610, Warning: A CREATE/ALTER ON OBJECT HAS PLACED OBJECT IN PENDING SQLCODE 625, Warning: THE DEFINITION OF TABLE HAS BEEN CHANGED TO INCOMPLETE 80

81 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 650, Warning: THE TABLE BEING CREATED OR ALTERED CAN NOT BECOME A DEPENDENT TABLE SQLCODE 653, Warning: TABLE IN PARTITIONED TABLE SPACE IS NOT AVAILABLE BECAUSE ITS PARTITIONED INDEX HAS NOT BEEN CREATED SQLCODE 655, Warning: STOGROUP HAS BOTH SPECIFIC AND NON-SPECIFIC VOLUME IDS. IT WILL NOT BE ALLOWED IN FUTURE RELEASES. SQLCODE 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 738, Warning: DEFINITION CHANGE OF MAY REQUIRE SIMILAR CHANGE ON READ-ONLY SYSTEMS SQLCODE 799, Warning: A SET STATEMENT REFERENCES A SPECIAL REGISTER THAT DOES NOT EXIST AT THE SERVER SITE SQLCODE 802, Warning: EXCEPTION ERROR HAS OCCURRED DURING OPERATION ON DATA, POSITION SQLCODE 806, Warning: BIND ISOLATION LEVEL RR CONFLICTS WITH TABLESPACE LOCKSIZE PAGE OR LOCKSIZE ROW AND LOCKMAX 0 SQLCODE 807, Warning: THE RESULT OF DECIMAL MULTIPLICATION MAY CAUSE OVERFLOW SQLCODE 863, Warning: THE CONNECTION WAS SUCCESSFUL BUT ONLY SBCS WILL BE SUPPORTED SQLCODE 883, Warning: ROLLBACK TO SAVEPOINT OCCURRED WHEN THERE WERE OPERATIONS THAT CANNOT BE UNDONE OR AN OPERATION THAT CANNOT BE UNDONE OCCURRED WHEN THERE WAS A SAVEPOINT OUTSTANDING 81

82 ANEXO 2.B SQLCODES EN CASTELLANO. +0 LA SENTENCIA SE HA REALIZADO SATISFACTORIAMENTE LA FILA QUE SE PRETENDE BUSCAR NO SE HA ENCONTRADO, BIEN PORQUE NO EXISTE CON LAS CONDICIONES DE BUSQUEDA O BIEN PORQUE LA TABLA. ESTA VACIA EL ESPACIO PARA TABLAS O LA TABLA ESTAN REVISÁNDOSE O COMPROBÁNDOSE ( NO ESTA DISPONIBLE) UN VALOR NO PUEDE SER ASIGNADO A UNA VARIABLE HOST PORQUE EL VALOR NO ESTA DENTRO DEL RANGO DE LA VARIABLE HOST POSICION DESCONOCIDA O IGNORADA EL OBJETO REFERENCIADO NO EXISTE PORQUE HA SIDO CREADO CON OTRO NOMBRE LA OPCION "GRANT" ES IGNORADA PORQUE EL "GRANT" ESTA HECHO PUBLICO LA OPCION "GRANT" ES IGNORADA PARA MODIFICAR COLUMNAS LOS PRIVILEGIOS "ALTER" E "INDEX" NO PUEDEN SER CONCEDIDOS AL HACER EL 'GRANT TO PUBLIC AT ALL LOCATIONS' LA DEFINICION DE UNA TABLA (NOMBRE DE LA TABLA) HA SIDO CAMBIADA A INCOMPLETA UN ERROR EXCEPCIONAL (TIPO DE EXCEPCION) HA OCURRIDO DURANTE UNA OPERACIÓN (TIPO DE OPERACIÓN) EN UN DATO (TIPO DE DATO), EN UNA POSICION (NUMERO DE POSICION) UNA SENTENCIA SQL CONTIENE UN CARÁCTER ILEGAL, INVALIDO LA CONSTANTE DE "STRING" COMENZADA NO HA SIDO TERMINADA ESTE ERROR DIO EN MICROFOCUS AL INTENTAR HACER UNA UPDATE EN LA QUE SE HABIA PUESTO LA PALBRA 'SET' DOS VECES LA ESPECIFICACION REFERENCIADA ES UN TIPO DE ESPECIFICACION O CARACTERISTICA INVALIDA PARA EL DB ESTE ERROR DIO UNA VEZ QUE EL COMPILADOR TRAGO UN CAMPO REFERENCIADO EN UNA SENTENCIA DB2, Y NO EXISTIENDO EN LA WORKING, PASO LA COMPILACION, CASCANDO EN LA EJECUCION. COMPROBAR LA LINEA DE MENSAJE DEL DB2(ALGUNA DE LAS PALABRAS ESCRITAS, BIEN NOMBRES DE COLUMNA, BIEN CAMPOS WORKING, O BIEN LA WHERE ESTAN MAL ESCRITAS). AL HACER UNA 'SELECT COUNT(*)' COMPROBAR QUE TIENE CORRECTA LA SINTAXIS. AL ABRIR UN CURSOR: COMPROBAR QUE NOMBRE DEL ULTIMO CAMPO DE UNA SELECT NO LLEGUE HASTA LA COLUMNA 72. SI SUCEDE ESTO PASAR ESTE ULTIMO CAMPO A LA LINEA SIGUIENTE. EN LA WHERE SE ESTA COMPARANDO UN NOMBRE DE COLUMNA CON UN CAMPO WORKING QUE ESTA SUBDIVIDIDO. SOLUCION: MOVER EL CAMPO SUBDIVIDIDO A OTRO CAMPO SIN SUBDIVIDIR Y COMPARAR CON ESTE LA SENTENCIA DB2 ES DEMASIADO LARGA O DEMASIADO COMPLEJA UNA CADENA TIENE MAS DE 254 CARACTERES ALFANUMERICOS O MAS DE 124 CARACTERES GRAFICOS HAY UNA CONSTANTE NUMERICA QUE CONTIENE CARACTERES NO NUMERICOS CUANDO TENEMOS PUESTO UN SIMBOLO ERRONEO DENTRO DE EL FICHERO UTILIZADO PARA LA OPERACIÓN REALIZADA.( POR EJEMPLO, UN ASTERISCO, EN VEZ DE UN GUION). OCURRIO EN EL BIND AL COMPILAR UN PROGRAMA PORQUE EN EL JCL HABIA UN / EN VEZ DE DOS EN LA DD. OCURRIO AL HACER UN UPDATE POR SPUFI PORQUE FALTABA ALGUNA COMA DETRÁS DE CADA VALOR DEFINIDO EN EL 'SET' PARA MODIFICARLO. OCURRIO AL HACER UNA SELECT CON ORDER BY POR SPUFI Y FALTABA UNA COMA DETRÁS DE CADA CAMPO DEL ORDER BY. OCURRIO AL HACER UNA SELECT CON ORDER BY POR SPUFI Y FALTABA UNA COMA DETRÁS DE CADA CAMPO DEL ORDER BY. OCURRIO AL HACER UNA SELECT CON CON ORDER EN DESCENDENTE POR SPUFI Y SE PUSO: NOMBRE-CAMPO D, EN VES DE DESC CONSTANTE DE CADENA INVALIDA HAY UN NOMBRE DE CAMPO DEMASIADO LARGO (VER MAXIMA LONGITUD EN EL MENSAJE DE DE ERROR) CLAUSULA NO PERMITIDA EN ESTA SENTENCIA COMIENZO DE UN LITERAL HEXADECIMAL ERRONEO UNA FUNCION SQL NO INCLUYE NOMBRE DE CAMPO EL OPERANDO DE UNA FUNCION SQL ES OTRA FUNCION SQL, O DISTINCT SEGUIDO DE OTRA EXPRESION SE HA DETECTADO UN CARÁCTER INVALIDO EN UNA PALABRA DE LA SENTENCIA SQL LA PARTE DERECHA DE UNA COMPARACION ES ERRONEA PORQUE EL OPERADOR ESTA SEGUIDO DE UN GRUPO DE PARENTESIS Y EN ALGUNO O EN TODOS FALTA UNA SUBSELECT EL NUMERO DE VALORES EN UNA INSERT ES DISTINTO DEL DE COLUMNAS DE LA TABLA. CUANDO LA DCL DE LA TABLA ES SUPERIOR, EN LONGITUD, A LA DCL QUE TENEMOS NOSOTROS EN TSO17. TENDREMOS QUE CREAR LA TABLA DE NUEVO EN 'TSO17.FUENTES.DB2' LA TABLA O VISTA EN UNA INSERT, DELETE O UPDATE DEBE SER IDENTIFICADA TAMBIEN EN LA CLAUSULA FROM. SE INTENTA DECLARAR UN CURSOR CON UNA JOIN, O CON UNA SUBSELECT, PARA INSERCION, MODIFICADO O BORRADO HAY UNA COLUMNA EN LA CLAUSULA HAVING QUE NO ESTA INCLUIDA EN LA CLAUSULA GROUP BY ERROR EN LA CLAUSULA WHERE DE UNA FUNCION SQL, O EN UNA COLUMNA DE UN GROUP BY DE UNA VISTA SE HA REPETIDO EL NOMBRE DE ALGUNA COLUMNA EN ALGUNA INSTRUCCIÓN UPDATE. 82

83 -122 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 NO SE PUEDE HACER UN SORT PORQUE LA LONGITUD DE LA CLAVE DE ORDENACION ES MAYOR QUE LA SECCION NUMERO NNNNN ES INVALIDA. SE HA MODIFICADO ALGUN DBRM INCLUIDO EN EL PLAN DB2 Y NO SE HA EFECTUADO EL BIND EL OBJETO PARA LA SENTENCIA INSERT, DELETE O UPDATE ES UNA VISTA PARA LA CUAL LA OPERACIÓN SOLICITADA NO ESTA PERMITIDA LA COLUMNA NO PUEDE SER ACTUALIZADA PORQUE ESTA INCLUIDA EN UNA CLAVE PARTICIONADA, EN UN ESPACIO PARA TABLA PARTICIONADO O ES EL RESULTADO DE UNA FUNCION O EXPRESION SQL LA SENTENCIA CREATE VIEW (CREAR VISTA ) NO INCLUYE NINGUN NOMBRE DE COLUMNA LA SENTENCIA CREATE VIEW (CREAR VISTA ) HA FALLADO PORQUE LA DE COLUMNA LA CLAUSULA 'FROM' ES INVALIDA PORQUE UNA DE LAS TABLAS ES UNA VISTA QUE INCLUYE UNA CLAUSULA 'GROUP BY' ALGUNA SENTENCIA 'ALTER TABLE', 'DROP TABLE', 'LOCK TABLE' O 'CREATE INDEX' IDENTIFICA A UNA VISTA EL NUMERO DE COLUMNAS ESPECIFICADO PARA LA VISTA NO ES EL MISMO QUE EL DE LA CLAUSULA SELECT EL NOMBRE ESPECIFICADO EN UNA 'DROP VIEW' ES UN NOMBRE DE TABLA LA OPCION 'WITH CHECK' NO PUEDE SER UTILIZADA EN LA VISTA ESPECIFICADA LA SENTENCIA SELECT O UPDATE NO ESTA PERMITIDA PORQUE LA FILA RESULTANTE NO SATISFACE LA DEFINICION DE LA VISTA NO SE TIENEN LOS PRIVILEGIOS PARA CREAR UNA VISTA CON CALIFICACION 'WITH' UN CAMPO DE UNA TABLA DB2 DEFINIDO COMO DATE CONTIENE UNA SINTAXIS ERRONEA O VALORES INVALIDOS. POR EJEMPLO UNA FECHA A BLANCOS O SIN GUIONES UN CAMPO DE UNA TABLA DB2 DEFINIDO COMO DATE O COMO TMESTAMP CONTIENE VALORES INVALIDOS, FUERA DE RANGO. POR EJEMPLO UNA FECHA : O UNA HORA: 12.68, 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

84 -302 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., DATE- ALFANUMERICO, ETC... CUANDO ESTAMOS INTENTANDO MODIFICAR UNA FILA POR SPUFI CON UN VALOR ALFANUMERICO Y EL CAMPO A MODIFICARES NUMERICO. CUANDO ESTAMOS INTENTAN- DO HACER UNA SELECT POR SPUFI CON UN VALOR ALFANUMERICO Y VICEVERSA. CUANDO SE SELECCIONA UN CAMPO QUE NO EXISTE EN LA TABLA SE INTENTA HACER UNA OPERACIÓN ARITMETICA O UNA SUMA CON UNA COLUMNA DEFINIDA COMO ALFANUMERICA: SUCEDIÓ AL HACER UNA SELECT SUM POR SPUFI, PIDIENDO QUE SUMARA UN NOMBRE DE COLUMNA DEFINIDA COMO ALFANUMERICA CUANDO ESTAMOS INTENTANDO INSERTAR, O MODIFICAR UNA FILA CON UN VALOR QUE EXCEDE A LA LONGITUD DETERMINADA PARA LA COLUMNA EN EL AREA TABLA-WORKING DIO AL ACCEDER A UNA TABLA DB2 PORQUE UN NOMBRE DE COLUMNA DE LA TABLA ESTABA DEFINIDO COMO "COMP-3" QUE SE USABA EN LA WHERE Y SE LE HABIA MOVIDO CONTENIDO NO NUMERICO. SE HA UTILIZADO UN LITERAL NUMERICO QUE ESTA FUERA DE RANGO EL VALOR NUMERICO HALLADO ESTA FUERA DEL RANGO DE LA COLUMNA OBJETO DE LA OPERACIÓN EN UNA OPERACIÓN UPDATE O INSERT EL VALOR A ACTUALIZAR ES NULO Y EL CAMPO NO PUEDE CONTENER NULOS CUANDO ESTAMOS INTENTANDO INSERTAR O MODIFICAR UNA FILA CON UN VALOR NUMERICO Y LA COLUMNA ES ALFANUMERICA. EL VALOR EN UNA INSERT O UPDATE NO ES EL MISMO TIPO QUE LA COLUMNA QUE SE QUIERE ACTUALIZAR OPERADOR INVALIDO EN UNA FUNCION 'COUNT' HAY UN LITERAL EN COMA FLOTANTE QUE TIENE MAS DE 30 CARACTERES LA CLAVE DEL USUARIO NO SE PUEDE UTILIZAR COMO SE ESPECIFICA LA CLAUSULA SELECT DE UNA SUBSELECT ESPECIFICA MULTIPLES COLUMNAS HAY UN DESBORDAMIENTO DURANTE UNA CONVERSION DE TIPOS DE DATOS HAY UNA COLUMNA NUMERICA ESPECIFICADA COMO ATRIBUTO EN UNA 'LIKE' LAS COLUMNAS CORRESPONDIENTES EN LOS OPERANDOS DE UNA CLAUSULA 'UNION' NO TIENEN LAS MISMAS DESCRIPCIONES DE CAMPO UN OPERANDO DE UNA 'UNION' CONTIENE UNA COLUMNA CON ATRIBUTO LONG STRING LA SENTENCIA DE CADENA A PREPARAR INCLUYE PARAMETROS UTILIZADOS COMO OPERANDOS DEL MISMO OPERADOR LA SENTENCIA DE CADENA A PREPARAR INCLUYE PARAMETROS UTILIZADOS EN UNA CLAUSULA SELECT EL RESULTADO DE UNA DIVISION DECIMAL DIO UN VALOR NEGATIVO LOS OPERANDOS DE UNA 'UNION' NO TIENEN EL MISMO NUMERO DE COLUMNAS SE INTENTA LEER O CERRAR UN CURSOR QUE NO HA SIDO ABIERTO SE INTENTA ABRIR UN CURSOR QUE YA ESTA ABIERTO CUANDO EN UNA UPDATE SE QUIERE MODIFICAR UN CAMPO QUE NO HA SIDO ESPECIFICADO EN EL FOR UPDATE AL CREAR EL CURSOR EL CURSOR ESPECIFICADO NO HA SIDO DEFINIDO EL CURSOR ESPECIFICADO PARA LA UPDATE O DELETE NO SE HA ABIERTO EL CURSOR ESPECIFICADO PARA LA UPDATE O DELETE NO SE HA POSICIONADO CORRECTAMENTE. SE INTENTA HACER UPDATE O DELETE DE UNA FILA QUE NO EXISTE (SQLCODE DEL CURSOR ES +100) SE PRODUCE CUANDO DECLARAMOS UN CURSOR PARA UNA TABLA Y AL HACER EL ACCESO LO UTILIZAMOS PARA OTRA TABLA SE PRODUCE CUANDO SE INTENTA MODIFICAR UNA COLUMNA DE UNA TABLA QUE NO ESTA EN LA SELECT DEL CURSOR O QUE NO SE HA PUESTO EN LA 84

85 CLAUSULA FOR UPDATE OF. (ESTE ERROR DA EN EL BIND EN COMPILACION). LA TABLA DESIGNADA EN EL DECLARE DEL CURSOR PARA MODIFICAR O BORRAR DICHA TABLA, NO PUEDE MODIFICARSE O BORRARSE (DEBIDO A QUE FALTA EN EL DECLARE CURSOR LA CLAUSULA "FOR UPDATE OF..." LA CLAUSULA 'FOR UPDATE' NO SE PUEDE UTILIZAR PORQUE LA TABLA UTILIZADA POR EL CURSOR NO SE PUEDE MODIFICAR EL CURSOR UTILIZADO NO ESTA PREPARADO LA SENTENCIA DE DESCRIPCION NO IDENTIFICA UNA SENTENCIA PREPARADA EL CURSOR UTILIZADO NO SE PUEDE UTILIZAR PORQUE NO ESTA DEFINIDO EN LA SENTENCIA SELECT CORRESPONDIENTE LA SENTENCIA EJECUTADA NO ES UNA SENTENCIA SELECT VALIDA LA SENTENCIA DE PREPARACION IDENTIFICA LA SENTENCIA DE SELECCIÓN DEL CURSOR ABIERTO NOMBRE-DE-CURSOR SE INTENTA DAR DE ALTA O MODIFICAR EN UNA TABLA CON INTEGRIDAD REFERENCIAL Y NO EXISTE EL PADRE DE LA RELACION EN UNA UPDATE CON CURSOR, NO SE PUEDEN PONER LOS CAMPOS QUE SON CLAVE E INDICE UNICO SE INTENTA CREAR UNA TABLA QUE TIENE INTEGRIDAD REFERENCIAL SIN HABER CREADO ANTES LA TABLA O EL/LOS INDICE/S DE LA TABLA PADRE NO SE TIENE PRIVILEGIO PARA REALIZAR ALGUNA OPERACIÓN.POR EJEMPLO AL HACER EL CREATE DE UNA TABLA DB2. TAMBIEN PUEDE OCURRIR POR: EL OBJETO DB2 NO EXISTE. EL OBJETO ESTA EN ESTADO READ ONLY. SE ESTA INTENTANDO CREAR UN OBJETO CON UN AUTHORIZATION-ID QUE NO TIENE AUTORIZACION PARA DICHA FUNCION. SI SE ESTA HACIENDO UN CREATE O UN ALTER DE UNA TABLA DEFINIDA CON INTEGRIDAD REFERENCIAL Y NO SE TIENE AUTORIZACION EL USUARIO NO TIENE PRIVILEGIOS, PARA HACER LA OPERACIÓN UN USUARIO AUTORIZADO NO PUEDE CONCEDERSE PRIVILEGIOS A SI MISMO UN USUARIO AUTORIZADO NO PUEDE REVOCARSE PRIVILEGIOS A SI MISMO UN PRIVILEGIO NO SE PUEDE REVOCAR PORQUE NO LO PUEDE MODIFICAR EL USUARIO(PARAMETRO1) COMANDO GRANT/REVOKE (PARAMETRO1) ERRONEO, LOS MANDATOS PERMITIDOS SON (PARAMETRO2) LA OPCION 'WITH' DE UNA GRANT ES IGNORADA PORQUE LA GRANT ES PUBLICA (WARNING) TODAS LAS FUNCIONES AUTORIZADAS HAN SIDO DESACTIVADAS LA OPCION WITH DE UNA GRANT ES IGNORADA PARA ACTUALIZAR COLUMN-LIST (WARNING) SE INTENTA CREAR ALGO QUE YA ESTA CREADO SE HAN ESPECIFICADO DEMASIADAS COLUMNAS AL INTENTAR CREAR UN INDICE SE INTENTA CREAR UN INDICE QUE EN SU TABLA CORRESPONDIENTE TIENE FILAS CON LA CLAVE REPETIDA LA DEFINICION DE UNA COLUMNA TIENE ERRORES EN SU LONGITUD, PRECISION O ATRIBUTOS LA OPERACIÓN (PARAMETRO1) NO ESTA DEFINIDA PARA LAS TABLAS LA COLUMNA (PARAMETRO1) ESTA DUPLICADA EL INDICE NO SE PUEDE CREAR PORQUE LA SUMA INTERNA DE LAS LONGITUDES DE SUS CAMPOS CORRESPONDIENTES ES MAYOR QUE EL MAXIMO PERMITIDO EL OBJETO (PARAMETRO1) NO SE PUEDE BORRAR PORQUE ES UTILIZADO POR EL OBJETO (PARAMETRO2) LA OPERACIÓN (PARAMETRO1) NO ESTA PERMITIDA EN EL SISTEMA DE BASES DE DATOS OPERACIÓN NO PERMITIDA PORQUE LA BASE DE DATOS DE TRABAJO NO ESTA INACTIVA EL COMANDO (PARAMETRO1) EN SENTENCIA (PARAMETRO2) NO ESTA PERMITIDO PARA EL ESPACIO DE TABLAS EN LA BASE DE DATOS DE TRABAJO YA EXISTE ESTE INDICE PARA LA TABLA (PARAMETRO1) LA CLAVE PARTICIONADA NO TIENE ESPECIFICADO SI ES EN ORDEN ASCENDENTE O DESCENDENTE LA CLAVE ESTA DUPLICADA EL VALOR ESPECIFICADO PARA LA CLAVE (PARAMETRO1) EN LA SENTENCIA (PARAMETRO2) ES ERRONEO LA TABLA (PARAMETRO1) NO SE PUEDE CREAR EN EL ESPACIO PARA TABLAS (PARTICIONADO/POR DEFECTO)(PARAMETRO2) PORQUE YA ESTA OCUPADO POR OTRA TABLA EL BUFFER COMUN (PARAMETRO1) NO SE PUEDE UTILIZAR PORQUE NO HA SIDO ACTIVADO VIOLACION DEL PROCEDIMIENTO DE EDICION O DE VALIDACION(PARAMETRO1) DE LA INSTALACION LA TABLA (PARAMETRO1) EN EL ESPACIO PARTICIONADO PARA TABLAS(PARAMETRO2) NO ESTA DISPONIBLE PORQUE EL INDICE CORRESPONDIENTE NO HA SIDO CREADO EL INDICE (PARAMETRO1) NO SE PUEDE CREAR EN EL ESPACIO PARTICIONADO PARA TABLAS (PARAMETRO2)PORQUE NO SE HAN ESPECIFICADO LOS LIMITES PARA LA CLAVE EL INDICE (PARAMETRO1) NO SE PUEDE CREAR EN EL ESPACIO PARTICIONADO PARA TABLAS (PARAMETRO2)PORQUE EL NUMERO DE PARTES ESPECIFICADO NO ES IGUAL AL NUMERO DE PARTICIONES DEL ESPACIO PARA TABLAS EL INDICE PARTICIONADO NO SE PUEDE CREAR EN EL ESPACIO NO PARTICIONADO PARA TABLAS (PARAMETRO1) EL NUMERO DE VALORES POSIBLES PARA LA CLAVE ES ZERO O MAYOR QUE EL NUMERO DE COLUMNAS EN LA CLAVE INDICE (PARAMETRO1) LA LONGITUD INTERNA DE LOS CAMPOS CLAVE-LIMITE DEL INDICE PARTICIONADO (PARAMETRO1) EXCEDE DE LA LONGITUD IMPUESTA POR EL GESTOR DE INDICES LA CLAUSULA PART DE UNA SENTENCIA ALTER HA SIDO OMITIDA O ES ERRONEA. 85

86 -666 PENDIENTE DE UNA UTILIDAD: UNA VEZ ESTABA 'COPY PENDING': SOLUCION : DESDE LA OPCION 7 (COMANDOS) DEL DB2: START DATABASE (BT999PROG) SPACENAN (ETXXXXXX) ACCESS (FORCE) UN GRUPO DE INDICES DE UN ESPACIO PARTICIONADO PARA TABLAS NO PUEDE SER EXPLICITAMENTE BORRADO NO SE PUEDE CREAR UNA NUEVA COLUMNA PORQUE LA TABLA SE ESTA EDITANDO UNA TABLA DE UN ESPACIO PARTICIONADO PARA TABLAS NO PUEDE SER EXPLICITAMENTE BORRADA LA LONGITUD DEL REGISTRO DE LA TABLA EXCEDE EL MARCO DE PAGINA EL ATRIBUTO DE BUFFER COMUN DEL ESPACIO PARA TABLAS NO SE PUEDE CAMBIAR PORQUE ESTO CAMBIARIA EL TAMAÑO DE LA PAGINA DEL ESPACIO PARA TABLAS NO SE PUEDE UTILIZAR PARA UN INDICE UNA PAGINA DE 32 K DEL ESPACIO PARA TABLAS NO HAY SUFICIENTE ESPACIO VIRTUAL PARA LA EXPANSION DEL BUFFER COMUN EL LITERAL (PARAMETRO1) ESPECIFICADO COMO VALOR LIMITE DEL INDICE DEBE ESTAR DE ACUERDO CON EL TIPO DE DATO (PARAMETRO2) DE LA COLUMNA CORRESPONDIENTE (PARAMETRO3) SE INTENTA HACER EL DROP Y LA CREATE DE UNA TABLA, EL DROP LO REALIZA BIEN PERO NO LA CREATE DEBIDO A QUE SE NECESITA HACER UN COMMIT ENTRE EL DROP Y LA CREATE DE LA TABLA DB LA TABLA TIENE DEMASIADAS COLUMNAS LA COLUMNA (PARAMETRO1) HA VIOLADO LOS PROCEDIMIENTOS DE DEFINICIÓN DE CAMPOS DE LA INSTALACION. RT: CODIGO-RETORNO RS: REASON-CODE MSG: MENSAJE PROCEDIMIENTO (PARAMETRO1) NO PUEDE SER CARGADO TIPO DE COLUMNA (PARAMETRO1) INVALIDO PARA ESTE PROCEDIMIENTO LA LONGITUD DEL LITERAL QUE COMIENZA CON ( PARAMETRO1) ES DEMASIADO LARGA TIPO DE CAMPO INVALIDO, NOMBRE-DE-COLUMNA NO SE PUEDEN COMPARAR DOS COLUMNAS DE DIFERENTE TIPO DOS TIPOS DE DATOS QUE NO SE PUEDEN COMPARAR DATOS INCORRECTOS DEVUELTOS POR EL PROCEDIMIENTO (PARAMETRO1, PARAMETRO2) HA HABIDO UNA DIVISION POR ZERO O UN DESBORDAMIENTO (OVERFLOW) ARITMETICO SE INTENTA INSERTAR UNA FILA CON CLAVE YA EXISTENTE.MODIFICAR EL INDICE UNICO DE UNA FILA (INSERTAR Y YA EXISTE) UN ERROR HA SIDO ENCONTRADO EN EL PGM, EN LOS PARAMETROS DE ENTRADA PARA EL SQL STATEMENT: OCURRIO AL DESBORDARSE UNA TABLA WORKING MACHACANDO LA SQLDA DE DB2. OCURRIO UNA VEZ QUE SISTEMAS HABIA MODIFICADO EL PROCEDIMIENTO DE COMPILACION... OCURRIO CON UNA LECTURA IMS, EN LA QUE SE INDICO UNA LONGITUD MAYOR QUE LA INFORMACION ENVIADA, POR LO QUE SE MACHACABA LA SQLCA... SE HA DECLARADO UNA TABLA WORKING CON MENOS FILAS DE LAS NECESARIAS NOMBRE DEL PROGRAMA (PARAMETRO1) NO ENCONTRADO EN EL PLAN (PARAM2); OCURRE CUANDO EL MODULO EN EL QUE ESTA ACCEDIENDO A DB2 NO ESTA EN EL PASO BIND DEL JCL, O BIEN AUSENCIA DEL MODULO EN LA DBRM, PRODUCIDO POR NO EXISTIR EN LA TSOXX.PGMPRUE CUANDO SE INTENTA REALIZAR CUALQUIER CASO DE SELECT (NORMAL, JOIN, ETC.), Y SE RECUPERA MAS DE UNA FILA SE HA INCLUIDO UNA CLAUSULA ORDER BY O HAVING EN UNA SUBSELECT O UNA SUBCONSULTA DE UN PREDICADO LA SENTENCIA INSERT, UPDATE, DELETE, DDL O GRANT NO PUEDE SER EJECUTADA PORQUE LA TRANSACCION IMS HA SIDO DEFINIDA COMO DE LECTURA SOLUCION: GENERAR LA TRANSACCION IMS COMO LECTURA Y ACTUALIZACION NO COINCIDEN LOS TIMESTAMP: VOLVER A COMPILAR. AL COMPILAR, EN EL PROCEDIMIENTO DE COMPILACION EL NOMBRE DEL PLAN ESTA MAL. ESTE ERROR SUCEDE SI: EL PROGRAMA SE HA PRECOMPILADO, COMPILADO Y LINKEDITADO, PERO NO SE HA HECHO EL BIND. SE HA PRECOMPILADO Y SE HA HECHO EL BIND, SIN HABER HECHO LA COMPILACION Y EL LINK-EDIT, O LA LINK-EDIT NO HA ACABADO BIEN. EL BIND SE HA HECHO CON UN DBRM QUE NO SE HA CREADO EN EL MISMO PROCESO DE LINK-EDIT QUE EL MODULO CARGABLE. AL COMPILAR UN BATCH(B2), NO SE HABIA HECHO EL FREE DEL PROGRAMA. SOLUCION: PARAR Y ARRANCAR LA REGION LA VISTA NO SE PUEDE UTILIZAR PORQUE ES UNA REFERENCIA A OTRA VISTA QUE NO SE PUEDE UTILIZAR LA SENTENCIA SQL NO SE PUEDE PROCESAR PORQUE (PARAMETRO1) CONTIENE UN VALOR NO VALIDO EN ESTA VERSION DEL PRODUCTO LA SQLCA CONTIENE UNA DIRECCION DE DATOS O UNA DIRECCION DE INDICADOR DE VARIABLE QUE NO ES VALIDA DEMASIADAS FILAS DEVUELTAS POR UNA SELECT O QUE SE PRETENDEN INSERTAR -901 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

87 EN SDSF. DA EN LA TAREA T005MSTR. (REASON CODE 00C90089). ALGO NO DISPONIBLE SE LLAMO A TECNICA DE SISTEMAS Y HABIA UN DISCO DAÑADO. (REASON CODE 00C90094). AL INTENTAR BORRAR UNA TABLA PORQUE HA SIDO CREADA CON VSAM Y EL CATALOGO DEL DB2 NO SE HA ENTERADO. (REASON CODE 00C90097). PENDIENTE DE UNA UTILIDAD.(REASON CODE 00D70014)./ UNFICHERO HA INTENTADO EXTENDERSE Y NO EXISTE ESPACIO EN DISCO. UN FICHERO HA TOMADO EL MAXIMO NUMERO DE EXTENSIONES(119) Y AL INTENTAR COGER UNA MAS HA PROVOCADO EL ERROR.(REASON CODE 00D70023). FALTA DE ESPACIO (REASON CODE 00D70024). / EXISTE EL CATALOGO PERO NO LOS FICHEROS (REASON CODE 00E70010). EL RECURSO NO DISPONIBLE NO SE ENCUENTRA EN ALGUNA LIBRERÍA. SUCEDIÓ CON UN PGM ON-LINE CUYA COMPILACION NO EXISTIA EN LA 'DESA. PGMPRUE.ONLINE' -905 LA SENTENCIA SQL CONTRA EL RECURSO (PARAMETRO1) HA EXCEDIDO EL TIEMPO LIMITE DE CPU (PARAMETRO2) Y SU PROCESO HA SIDO CANCELADO EL PROGRAMA PUEDE SEGUIR EJECUTANDO OTRAS SENTENCIAS SQL LA SENTENCIA SQL NO SE PUEDE EJECUTAR PORQUE ESTA FUNCION HA SIDO DESACTIVADA DEBIDO A UN ERROR PREVIO EL OBJETO HA SIDO BORRADO LA SENTENCIA SQL NO PUEDE ACCEDER A UN OBJETO SOBRE EL QUE ESTA PENDIENTE UNA SENTENCIA DROP O ALTER LOS CAMBIOS EFECTUADOS DESDE EL ULTIMO PUNTO DE SINCRONIA HAN SIDO ANULADOS (ROLLBACK) DEBIDO A QUE LOS RECURSOS NO ESTAN LIBRES (DEADLOCK) O SE PASO EL TIEMPO DE ESPERA (TIME-OUT) EJECUCION CANCELADA DEBIDO A UN DEADLOCK O A UN TIME-OUT. RAZON (PARAMETRO1), TIPO DE RECURSO (PARAMETRO2), NOMBRE DEL RECURSO (PARAMETRO3). EL PROGRAMA DE APLICACIÓN DEBERIA HACER COMMIT O ROLLBACK. VOLVER A EJECUTAR. SI LA FRECUENCIA DE ESTE SQLCODE ES ALTA ESTUDIAR LA POSIBILIDAD DE HACER VARIOS PUNTOS DE COMMIT FALTA DE AUTORIZACION: HACER PUBLICO EL PLAN (GRANT). SI (PARAMETRO1) ES UN USUARIO INDICA QUE EL USUARIO NO TIENE AUTORIZACION PARA CONECTARSE A DB2. SI (PARAMETRO1)ES UN PLAN INDICA QUE EL DB2 NO PUEDE ALOCAR ESE PLAN. SI (PARAMETRO1) ES UN SUBSISTEMA INDICA QUE EL NOMBRE DE ESTE SUBSISTEMA ES INVALIDO CONEXIÓN NO ESTABLECIDA - DB2 NO OPERACIONAL. HACER UN GRANT PUBLIC. EN EL JCL DE EJECUCION FALTA LA FICHA DB2. ESTO SUCEDE SI : NO SE HECHO EL BIND. EL PLAN ES INVALIDO O NO ESTA OPERATIVO. HACER EL BIND. UNA BASE DE DATOS, UN TABLESPACE, UN INDICE O UNA TABLA QUE VAN A SER ACCEDIDAS POR AL PLAN NO ESTAN DISPONIBLES. FALLOS EN ALGUN FICHERO VSAM. DB2 PARADO PROBLEMAS DE CONEXIÓN CON EL DB2: OCURRE CUANDO SE HA CAIDO EL DB COMMIT NO VALIDO EN EL ENTORNO IMS/VS O CICS/OS/VS EL INTERFACE DEL LENGUAJE (LI) FUE LLAMADO CUANDO LA CONEXIÓN DEL ENTORNO AUN NO HABIA SIDO ESTABLECIDA. EL PROGRAMA FUE LLAMADO BAJO EL COMANDO DSN. EN UNA EJECUCION BATCH CON DB2 LE FALTAN LAS FICHAS DEL DB (EN MICROFOCUS) FALTA DE MEMORIA (EN MICROFOCUS) EL COD-IDENT NO ESTA DEFINIDO COMO "COMP" S9(4)COMP, SI NO COMO S9(4) FALTAN LOS DOS PUNTOS QUE PRECEDEN A LOS CAMPOS WORKING DE LA WHERE EN UNA SELECT O EN UN CURSOR. ENTRE LOS CAMPOS SELECCIONA- DOS 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 , (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 ANEXO 3: ABEND CODES bajo TSO / ISPF S001-4 Abend Input file record length is not equal to the length stated in the DD or the FD. Wrong length record. IO error, damaged tape, device malfunction. With disk, reading a dataset that was allocated but never written to. Writing to input file Concatenation of files with different record lengths or record formats. S001-5 Abend Reading after the end of the file by non-cobol program. COBOL intercepts this and displays "QSAM error, status 92". Out of space on output disk file. S002 Abend With variable format files used for output. The record is larger than the track size. The record length is greater than allowed maximum 32,768. The wrong record length is being used on output. The 4-byte record length indicator is wrong. Record greater than 32,768 bytes S Abend A dummy file with no blocksize. S Abend A library has run out of space in its directory. You have to backup, delete, and restore the library with IEBCOPY. A dataset is sequential, but the JCL indicates that it is a library/pds. S Abend A library member was specified in the JCL but was not found. S Abend The block size is not a multiple of record length. Check record length in program, compare to actual record length of file S Abend The block size was found to be 0. A new file is being created but block size was not in the JCL. S Abend Reading a file whose JCL has SYSOUT= S106 Abend The program on the program library was unreadable. Recompile and link. S122 Abend The job was canceled because it violated some restriction. A dump was requested S137 Abend A tape has a bad trailer label. Copy the file with IEBGENER, ignoring the error. The copy will be good. Using LABEL=2 when there's only one dataset on the tape. 88

89 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

90 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

91 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: Utilidades y Objetos para el Reposicionamiento Batch. ANEXO 4.1. DAREPOS. En la tabla DAREPOS se guardará el estado actual de cada proceso y toda la información necesaria para su reposicionamiento, cuando este fuese necesario. Llamaremos clave de entrada o puntero a la información almacenada en DAREPOS, que se utiliza para restablecer la situación del proceso al momento en el que se produjo el error, para su rearranque. El prefijo de la tabla DAREPOS es RUR y se compone de los siguientes campos: Figura 5 - Campos de la tabla DAREPOS DCLGEN DE LA TABLA DAREPOS ******************************************************************************* * DCLGEN TABLE(DAREPOS) * LIBRARY(SIS.GRSIS.COPYLIB(D )) * 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 RUR-ESTADO PIC X(1). 10 RUR-NUMCOMM PIC S9(4) USAGE COMP. 10 RUR-PUNTEROS. 49 RUR-PUNTEROS-LEN PIC S9(4) USAGE COMP. 49 RUR-PUNTEROS-TEXT PIC X(254). ******************************************************************************** * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 5 ******************************************************************************** (volver SoporteFísico) (Ver #LQBBN01) 92

93 ANEXO 4.2 DAPROCBATCH. La tabla DAPROCBATCH guarda información sobre los ficheros de salida de cada proceso susceptible de ser reposicionado. Debe darse de alta en esta tabla una línea por cada uno de los ficheros de salida que tenga el proceso a reposicionar. El prefijo de la tabla DAPROCBATCH es IPB y se compone de los siguientes campos: Figura 6 - Campos de la tabla DAPROCBATCH DCLGEN DE LA TABLA DAPROCBATCH ************************************************************************** * DCLGEN TABLE(DBS1.EXP01.DAPROCBATCH) * LIBRARY(SIS.GRSIS.COPYLIB(D )) * ACTION(REPLACE) * APOST *... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS ************************************************************************** EXEC SQL DECLARE DAPROCBATCH TABLE ( IPB_PLANNAME CHAR(8) NOT NULL, IPB_DDNAME CHAR(8) NOT NULL, IPB_LONREG SMALLINT NOT NULL, IPB_LONBLK SMALLINT NOT NULL, IPB_REGTRK SMALLINT NOT NULL, IPB_DISPOS CHAR(4) NOT NULL, IPB_NUMREGS SMALLINT NOT NULL, IPB_TIPREG CHAR(3) NOT NULL ) END-EXEC. ************************************************************************** * COBOL DECLARATION FOR TABLE DAPROCBATCH ************************************************************************** 01 DCLDAPROCBATCH. 10 IPB-PLANNAME PIC X(8). 10 IPB-DDNAME PIC X(8). 10 IPB-LONREG PIC S9(4) USAGE COMP. 10 IPB-LONBLK PIC S9(4) USAGE COMP. 10 IPB-REGTRK PIC S9(4) USAGE COMP. 10 IPB-DISPOS PIC X(4). 10 IPB-NUMREGS PIC S9(4) USAGE COMP. 10 IPB-TIPREG PIC X(3). (volver SoporteFísico) (Ver #LQBBN01) 93

94 ANEXO 4.3. INCLUDES Y COPYS. A continuación se describen las INCLUDES y COPYS que deben utilizarse para estandarizar el uso de las tablas y de la rutina UR0000 dentro de los programas: Existen unas copys que contienen campos de trabajo estándar para ser utilizados por el programa de aplicación. Se encuentran en la librería: SIS.GRUR.COPYLIB. URCOPYS. Esta copy contiene las copys RURCOMM y RUROPER que se utilizan para comunicarse con la rutina UR0000 que gestiona el tratamiento de los ficheros de salida del proceso, dejando en ellas la información necesaria para el mismo. En RURCOMM deja información acerca del número de commit por el que vamos, nombre del plan, el número de registros que se pasa en el JCL por los que hace COMMIT e información sobre los ficheros de salida como el nombre de la ddname, el blocaje, el tipo de dispositivo, número de registros por pista, etc. En RUROPER hay información sobre las llamadas a la rutina UR0000, cuando está en inicio, al final, etc. ***************************************************************** *** *** COPY RUROPER *** ***************************************************************** 01 RUR-OPER. 05 RUR-CALL PIC X(8) VALUE 'UR0000'. 05 RUR-INIT PIC X(4) VALUE 'INIT'. 05 RUR-NEW PIC X(4) VALUE 'NEW '. 05 RUR-READ. 10 FILLER PIC X(4) VALUE 'READ'. 10 RUR-READ-DD PIC X(8) VALUE SPACES. 05 RUR-SHR PIC X(4) VALUE 'SHR '. 05 RUR-DEL PIC X(4) VALUE 'DEL '. 05 RUR-END PIC X(4) VALUE 'END '. ***************************************************************** *** *** COPY RURCOMM *** ***************************************************************** 01 RURCOMM. 05 CA-OPER PIC X(4). 05 CA-PARAM. 10 CA-PLANNAME PIC X(8). 10 CA-PROCESO PIC CA-COMMIT PIC (4). 10 CA-NUMREG PIC S9(8) COMP. 10 CA-PREF PIC X(4). 05 CA-PARMOK PIC X. 88 PARMOK VALUE 'S'. 05 CA-MSG PIC X(6). 05 CA-PARM1 PIC X(20). 05 CA-PARM2. 10 CIRC PIC FILLER PIC X. 10 CIEC PIC FILLER PIC X. 10 CIIC PIC FILLER PIC X(2). 10 CIRCX PIC S9(4) COMP. 10 CIECX PIC S9(4) COMP. 10 CIICX PIC S9(4) COMP. 05 CI-AMSG PIC X(4). 05 CA-OCCUR PIC S9(4) COMP. 05 CA-DDNAMES. 06 CA-ELE-DDNAMES OCCURS 50 TIMES. 10 CIDD PIC X(8). 94

95 10 CILDSN PIC X. 10 CIDSN PIC X(30). 10 CIPRI PIC S9(4) COMP. 10 CISEC PIC S9(4) COMP. 10 CIPOOL PIC X(8). 10 CIBLK PIC S9(4) COMP. 10 CILRECL PIC S9(4) COMP. 10 CIREGTRK PIC S9(4) COMP. 10 CIDISPOS PIC X(4). URMENSA. Esta copy contiene campos generales para mensajes de error *************************************************************** *** *** COPY DE MENSAJES DE ERROR PARA PROGRAMAS BATCH *** QUE USEN " REPOSICIONAMIENTO " *** *************************************************************** * *** RUTINA DE CANCELACION UTILIZADA POR PROGRAMAS BATCH * XXCANCEL PIC X(8) VALUE 'XXCANCEL' * *** CODIGOS DE MENSAJES : * UR-CODICAN PIC 9(4) VALUE UR-OPEN-ERROR PIC 9(4) VALUE UR-FETCH-ERROR PIC 9(4) VALUE UR-CLOSE-ERROR PIC 9(4) VALUE UR-SELECT-ERROR PIC 9(4) VALUE UR-UPDATE-ERROR PIC 9(4) VALUE UR-INSERT-ERROR PIC 9(4) VALUE URSWITCH. Copy que contiene " switches " generales utilizados por los programas de aplicación generados por arquitectura, y un switch específico de relanzamiento para el caso de los programas que utilizan reposicionamiento y leen de un fichero secuencial ********************************************************* * * COPY QUE CONTIENE LOS " SWITCHES " UTILIZADOS * POR PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO * ********************************************************* * FILLER PIC X HAY-ERROR-PROCESO VALUE 'S' NO-HAY-ERROR-PROCESO VALUE 'N' * FILLER PIC X FIN-PROCESO VALUE 'S' NO-FIN-PROCESO VALUE 'N' * SW-ERROR PIC X SI-ERROR VALUE 'S' NO-ERROR VALUE 'N' * SW-FIN-DATOS PIC X. 95

96 FIN-DATOS VALUE 'S' NO-FIN-DATOS VALUE 'N' *--- SOLO PARA PROGRAMAS QUE UTILIZEN FICHERO SECUENCIAL *--- DE ENTRADA SW-RELANZAMIENTO PIC X SI-RELANZAMIENTO VALUE 'S' NO-RELANZAMIENTO VALUE 'N'. URSQLCOD Campos para el control del SQLCODE ***************************************************************** *** *** COPY PARA EL CONTROL DE SQLCODE UTILIZADO PARA *** PROGRAMAS BATCH QUE UTILICEN REPOSICIONAMIENTO *** Y UTILICEN TABLAS DB2 DE ENTRADA AL PROCESO *** (EJEMPLO PARA 4 CURSORES DE REPOSICIONAMIENTO) *** ***************************************************************** * UR-SQL-CUR1 PIC S9(9) COMP UR-SQL-CUR2 PIC S9(9) COMP UR-SQL-CUR3 PIC S9(9) COMP UR-SQL-CUR4 PIC S9(9) COMP * *** SWITCH QUE INDICA EL CURSOR QUE ESTA ABIERTO EN ESE MOMENTO * SW-UR-CSR PIC X UR-CSR1 VALUE '1' UR-CSR2 VALUE '2' UR-CSR3 VALUE '3' UR-CSR4 VALUE '4'. URWORK Copy que contiene campos de trabajo estándar específicos para programas batch que utilicen reposicionamiento ***************************************************************** *** *** COPY QUE CONTIENE LOS CAMPOS DE TRABAJO UTILIZADOS *** EN PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO *** ***************************************************************** * UR-CONT-REG PIC S9(8) COMP * UR-CEROS PIC S9(4) COMP VALUE ZEROES UR-PROCESO PIC S9(2) COMP UR-COMMIT PIC S9(4) COMP *--- CAMPOS PARA GUARDAR LA ULTIMA CLAVE LEIDA DE LA TABLA *--- SOLO PARA PROGRAMAS QUE UTILIZAN TABLAS DB2 DE ENTRADA UR-VALOR-CURSOR UR-VALOR-CURSOR-LEN PIC S9(4) COMP UR-VALOR-CURSOR-TEXT PIC X(254) *--- CAMPOS PARA GUARDAR EL ULTIMO REGISTRO LEIDO DEL FICHERO *--- PARA PROGRAMAS QUE UTILIZAN FICHEROS SECUENCIALES DE ENTRAD UR-VALOR-REGISTRO UR-VALOR-REGISTRO-LEN PIC S9(4) COMP UR-VALOR-REGISTRO-TEXT PIC X(254). 96

97 URDCLGEN Dclgen de DAREPOS: Tabla para guardar los punteros para el reposicionamiento. ***************************************************************** * DCLGEN TABLE(DAREPOS) * LIBRARY(SIS.GRSIS.COPYLIB(D )) * 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 RUR-ESTADO PIC X(1). 10 RUR-NUMCOMM PIC S9(4) USAGE COMP. 10 RUR-PUNTEROS. 49 RUR-PUNTEROS-LEN PIC S9(4) USAGE COMP. 49 RUR-PUNTEROS-TEXT PIC X(254). ***************************************************************** * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 5 ***************************************************************** URCURSOR Copy que incluye el cursor for update de DAREPOS ***************************************************************** *** *** COPY QUE INCLUYE EL CURSOR FOR UPDATE DE DAREPOS *** (TABLA EN LA QUE SE GUARDAN LOS PUNTEROS UTILIZADOS *** PARA REALIZAR REPOSICIONAMIENTO EN PROGRAMAS BATCH) *** *** PARA PROGRAMAS QUE LLAMAN A LA RUTINA "UR0000" *** ***************************************************************** EXEC SQL DECLARE REP CURSOR FOR SELECT RUR_PLANNAME, RUR_PROCES, RUR_ESTADO, RUR_NUMCOMM, RUR_PUNTEROS FROM DAREPOS WHERE RUR_PLANNAME = :CA-PLANNAME AND RUR_PROCES = :UR-PROCESO FOR UPDATE OF RUR_ESTADO, RUR_NUMCOMM, RUR_PUNTEROS END-EXEC. (volver SoporteFísico) (Ver #LQBBN01) 97

98 ANEXO 4.4 FUNCIONES. XX_CANCELACION_PROCESOS_BATCH. Se utiliza en los procesos Batch para cancelar la ejecución de un programa por cualquier tipo de error. Utiliza los siguientes parámetros: Figura 7 - Parámetros de la función XX_CANCELACION_PROCESOS_BATCH (volver SoporteFísico) (Ver #LQBBN01) 98

99 ANEXO 4.5. JCL REPOSICIONAMIENTO CLEARCOM Esta utilidad se ejecuta antes de los programas de aplicación para comprobar el estado del proceso y lo prepararlo para su ejecución desde el principio o para su reposicionamiento. Realiza las siguientes funciones: 1. Comprobación del estado del proceso y el número de confirmaciones realizadas. Para ello consulta la tabla DAREPOS. - Si no encuentra el registro correspondiente al plan/proceso considera que es la primera ejecución. - Si el proceso se encuentra en un estado distinto del inicial (P) o el intermedio (C), devuelve un mensaje de aviso, pero acaba con código de retorno Consulta la tabla DAPROCBATCH. Para saber cual es la DDNAME de los ficheros de salida alocados dinámicamente y poder construir su nombre. 3. Borrado de los ficheros de salida no confirmados. En caso de que el proceso se encuentre en estado intermedio (C), se eliminan los ficheros de salida correspondientes a los últimos datos procesados y NO confirmados. JCLREPOS: JCL de ejecución del programa con Clist para borrado del último fichero de COMMIT en caso de relanzar el programa. //SI4MAAB JOB (DES),'*** MANUAL ***',NOTIFY=SI4MAA, // CLASS=2,MSGCLASS=X,MSGLEVEL=1,REGION=2M //* //** //** CLEARCOM : BORRADO DEL ULTIMO FICHERO DE COMMIT EN EL //** CASO DE QUE SEA NECESARIO RELANZAR EL PROCESO. //** //* //CLEARCOM EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=3M,COND=(0,NE) //ISPCTL0 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)), // DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB) //ISPCTL1 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)), // DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB) //ISPCTL2 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)), // DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB) //ISPCTL3 DD DISP=NEW,UNIT=DISKDES,SPACE=(CYL,(1,1)), // DCB=(LRECL=080,BLKSIZE=0800,RECFM=FB) //ISPSLIB DD DSN=ISP.V3R2M0.ISPSLIB,DISP=SHR // DD DSN=ISR.V3R2M0.ISRSENU,DISP=SHR //ISPPROF DD DSN=&PROFILE,SPACE=(TRK,(1,1,1)),UNIT=DISKDES, // DCB=(DSORG=PO,LRECL=80,BLKSIZE=3200), // DISP=(NEW,DELETE,DELETE) //ISPPLIB DD DSN=ISP.V3R2M0.ISPPENU,DISP=SHR // DD DSN=ISR.V3R2M0.ISRPENU,DISP=SHR // DD DSN=SIS.GRAR.PLIB,DISP=SHR //ISPMLIB DD DSN=SIS.ISPF.MLIB,DISP=SHR // DD DSN=ISR.V3R2M0.ISRMENU,DISP=SHR // DD DSN=ISP.V3R2M0.ISPMENU,DISP=SHR // DD DSN=SIS.GRAR.MLIB,DISP=SHR //ISPTLIB DD DSN=ISP.V3R2M0.ISPTENU,DISP=SHR // DD DSN=SIS.GRAR.TABL,DISP=SHR //ISPTABL DD DSN=SIS.GRAR.TABL,DISP=SHR 99

100 //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

101 ANEXO 5. Enfrentamiento de ficheros. Hay procesos en los que se necesita comparar registros de un fichero con registros de otro u otros ficheros. Esto se conoce como enfrentamiento de ficheros. Para poder aplicar esta técnica, se requiere que los ficheros sean secuenciales y que estén ordenados por un mismo campo. Este campo será la clave, por la que vamos a comparar ambos ficheros. Podemos enfrentar dos ficheros para fusionarlos en un tercero ordenado, para obtener datos y tratarlos etc. Lo único que hemos de tener en cuenta es que cuando se llegue al final de uno de los ficheros, se ponga la clave a HIGH-VALUES, ya que en ese caso podremos seguir leyendo del otro fichero y comparar las claves de ambos ficheros. La clave del fichero que aún no se ha terminado de leer siempre será menor que la del otro que está a HIGH-VALUES. ( ) Ejemplo de fusión de dos ficheros en un tercero mediante enfrentamiento de ficheros: <INICIO> Se abren los ficheros a enfrentar y el de salida. Se lee el primer registro de cada fichero. PERFORM 2000-PROCESO-ENFRENTAMIENTO THRU 2000-PROCESO-ENFRENTAMIENTO-EXIT UNTIL (CLAVE1 <> HIGH-VALUES OR CLAVE2 <> HIGH-VALUES) <FIN> Se cierran los tres ficheros PROCESO-ENFRENTAMIENTO. IF CLAVE1 LESS THAN CLAVE2 <Mover los campos del Fichero1 al Fichero3> <Escribir en el Fichero3> ELSE PERFORM 9100-LEER-FICHERO1 THRU 9100-LEER-FICHERO1-EXIT IF CLAVE1 GREATER THAN CLAVE2 <Mover los campos del Fichero2 al Fichero3> <Escribir en el Fichero3> ELSE PERFORM 9200-LEER-FICHERO2 THRU 9200-LEER-FICHERO2-EXIT <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 PROCESO-ENFRENTAMIENTO-EXIT. EXIT. 101

102 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 AND NOT EQUAL CA-FIN-FICH PERFORM 9300-ERROR-FICHERO THRU 9300-ERROR-FICHERO-EXIT END-IF LEER-FICHERO1 EXIT. (Ver #S410UNIDADCOMM 102

103 ANEXO-SORT ORDENACIÓN BÁSICA Figura 8 - SORT - Ordenacion básica 103

104 ORDENACIÓN PARCIAL Figura 9 - SORT - Ordenacion parcial 104

105 COPIA DE UN FICHERO Figura 10 - SORT - Copia de un fichero 105

106 COPIA PARCIAL DE UN FICHERO Figura 11 - SORT - Copia parcial de un fichero 106

107 ORDENAR Y CAMBIAR DISPOSICIÓN DE CAMPOS Figura 12 - SORT - Ordena y cambia disposicion de campos 107

108 ELIMINAR REPETIDOS Figura 13 - SORT - Eliminar repetidos 108

109 ACUMULAR Figura 14 - SORT - Acumular OPERADORES Y TIPOS DE DATOS - Para hacer referencia a los tipos de datos según su origen, se utilizan los siguiente operadores: o PZ: PIC 9() Numérico display o PD: PIC 9() COMP-3 Numérico empaquetado o BI: PIC 9() COMP Numérico binario o CH: PIC x() Alfanumérico - Para las comparación de mayor, menor, etc; se utilizaran los siguientes operadores: o GT: Mayor que o EQ: Igual o LT: Menor que 109

110 110

111 ANEXO 6. just enough ispf Creating a PDS/Library Option 3, Utility, from the main menu Menu Utilities Compilers Options Status Help ISPF Primary Option Menu Option ===> 3 0 Settings Terminal and user parameters User ID. : userid 1 View Display source data or listings Time... : 06:49 2 Edit Create or change source data Terminal. : Utilities Perform utility functions Screen.. : 1 4 Foreground Interactive language processing Language. : ENGLISH 5 Batch Submit job for language processing Appl ID. : ISR 6 Command Enter TSO or Workstation commands TSO logon : TRAINING 7 Dialog Test Perform dialog testing TSO prefix: userid 8 LM Facility Library administrator functions System ID : SYS1 Enter X to Terminate using log/list defaults Then option 2 from Utility menu, dataset utility Menu Help Utility Selection Panel Option ===> 2 1 Library Compress or print data set. Print index listing. Print, rename, delete, browse, edit or view members 2 Data Set Allocate, rename, delete, catalog, uncatalog, or display information of an entire data set 3 Move/Copy Move, copy, or promote members or data sets 4 Dslist Print or display (to process) list of data set names. Print or display VTOC information 5 Reset Reset statistics for members of ISPF library

112 Choose M for enhanced allocate (if there is no M, use A) Press ENTER 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' 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 (In above units) Secondary quantity.. 5 (In above units) Directory blocks (Zero for sequential data set) * Record format.... FB Record length Block size 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

113 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.... Options Profile Name..... / Confirm Cancel/Move/Replace Format Name..... Mixed Mode Data Set Password.. Edit on Workstation Type in the name of your new library, as well as a member name as shown. Then press ENTER You have to do it this way on this screen, if it s the first time you re editing this PDS/Library. File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns 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

114 Before typing anything in, check your profile File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> PROFILE Scroll ===> CSR ****** ***************************** Top of Data ****************************** ==MSG> -Warning- The UNDO command is not available until you change ==MSG> your edit profile using the command RECOVERY ON. ''''''RECOVERY OFF NULLS OFF CAPS ON '''''' '''''' '''''' To adjust your profile: you can't go wrong with these commands: for CNTL, DATA, use these:. RECOVERY ON;RENUM;UNNUM;NULLS ON ALL for COBOL, use these: RECOVERY ON;RENUM;UNNUM;RENUM COB;NULLS ON ALL Line numbers are recommended for COBOL, cause trouble with all other types. ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Comman ===> RECOVERY ON;RENUM;UNNUM;NULLS ON ALL: (see note above) Scroll ===> CSR ****** ***************************** Top of Data ****************************** ****** **************************** Bottom of Data **************************** RESET will remove the PROFILE display File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> RESET Scroll ===> CSR 114

115 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) Columns Command ===> Scroll ===> CSR I8 ***************************** Top of Data ****************************** ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** '''''' '''''' '''''' '''''' ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR _ ****** ***************************** Top of Data ****************************** '''''' //userida JOB (xxxx), SAL MONELLA,CLASS=c,MSGCLASS=m, '''''' // NOTIFY=userid,TIME=(,5) '''''' //STEP1 EXEC PGM=IEFBR14 '''''' Replace userid by your userid xxxx by your company s accounting information, c by the proper testing class, and m by the proper held print class used in testing 115

116 File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> SUBMIT Scroll ===> CSR ****** ***************************** Top of Data ****************************** '''''' //userida JOB (xxxx), SAL MONELLA,CLASS=c,MSGCLASS=m, '''''' // NOTIFY=userid,TIME=(,5) '''''' //STEP1 EXEC PGM=IEFBR14 '''''' '''''' If it s JCL you re doing, you may submit it. Save and exit by pressing PF3 Then get into SDSF to view JCL job's output Use the menu numbers in use at your company. Display Filter View Print Options Help V1R6M SDSF PRIMARY OPTION MENU COMMAND INPUT ===> H SCROLL ===> PAGE Type an option or command and press Enter. DA - Display active users in the sysplex I - Display jobs in the JES2 input queue O - Display jobs in the JES2 output queue H - Display jobs in the JES2 held output queue ST - Display status of jobs in the JES2 queues TUTOR - Short course on SDSF (ISPF only) END - Exit SDSF 116

117 Display Filter View Print Options Help SDSF HELD OUTPUT DISPLAY ALL CLASSES LINES 36,115 LINE 1-13 (29) COMMAND INPUT ===> PREFIX userid* SCROLL ===> PAGE NP JOBNAME JOBID OWNER PRTY C ODISP DEST TOT-REC TOT- Tell SDSF to display jobs starting with your userid, only. Display Filter View Print Options Help SDSF HELD OUTPUT DISPLAY ALL CLASSES LINES 36,115 LINE 1-13 (29) COMMAND INPUT ===> SCROLL ===> PAGE NP JOBNAME JOBID OWNER PRTY C ODISP DEST TOT-REC TOT-? useridw JOB00669 userid 144 H HOLD LOCAL 664 useridx JOB00648 userid 144 H HOLD LOCAL 240? next to the job name breaks the job down into separate print files Select the print file you want with S 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

118 Display Filter View Print Options Help SDSF OUTPUT DISPLAY useridc JOB00985 DSID 109 LINE 0 COLUMNS 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 TOT- P useridc JOB00985 userid 144 Q HOLD LOCAL 662 If you have finished, Purge the print file 118

119 Have ISPF show you a list of your files =3;4, then ENTER The list of files, and a few Editing features Menu RefList RefMode Utilities Help Data Set List Utility Option ===> blank Display data set list P Print data set list V Display VTOC information PV Print VTOC information Enter one or both of the parameters below: Dsname Level... userid Volume serial.. Data set list options Initial View Volume Enter "/" to select option 2. Space / Confirm Data Set Delete 3. Attrib / Confirm Member Delete 4. Total The following actions will be available when the list is displayed: Enter a "/" on the data set list command field for command prompt pop-up. Enter TSO commands, CLIST, REXX execs, or "=" to execute previous command. Type in your userid Then press ENTER From commercial use or resale of this document is a violation of copyright laws. 119

120 Type E, to edit your PDS/Library 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 File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl Member List Command ===> S NEWMEMB Scroll ===> CSR ****** ***************************** Top of Data ****************************** MEMBER1 MEMBER2 MEMBER3 A list of members appears. (There may be none in the list) Type S next to the name of the member you wish to edit If the name does not appear on the list, type S membername on the command line File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** HELLO THIS IS A TEST THIS IS LINE 2 THIS IS LINE 3 ****** **************************** Bottom of Data **************************** For the sake of example, type in these three lines File Edit Confirm Menu Utilities Compilers Test Help

121 Moving the first line after the last EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR _ ****** ***************************** Top of Data ****************************** M HELLO THIS IS A TEST THIS IS LINE 2 A THIS IS LINE 3 ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** THIS IS LINE THIS IS LINE HELLO THIS IS A TEST ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** C THIS IS LINE THIS IS LINE 3 A HELLO THIS IS A TEST ****** **************************** Bottom of Data **************************** Now copy the first line after the last File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** THIS IS LINE THIS IS LINE 3 121

122 Now repeat the third line HELLO THIS IS A TEST THIS IS LINE 2 ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** THIS IS LINE THIS IS LINE 3 R HELLO THIS IS A TEST THIS IS LINE 2 ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** THIS IS LINE THIS IS LINE HELLO THIS IS A TEST HELLO THIS IS A TEST THIS IS LINE 2 ****** **************************** Bottom of Data **************************** 122

123 Delete a line File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** THIS IS LINE THIS IS LINE 3 D HELLO THIS IS A TEST HELLO THIS IS A TEST THIS IS LINE 2 ****** **************************** Bottom of Data **************************** File Edit Confirm Menu Utilities Compilers Test Help EDIT userid.class.cntl(newmemb) Columns Command ===> Scroll ===> CSR ****** ***************************** Top of Data ****************************** MM THIS IS LINE 2 MM THIS IS LINE HELLO THIS IS A TEST A THIS IS LINE 2 ****** **************************** Bottom of Data **************************** move the first two lines after the last 123

124 Choose Option 0 from the main menu, settings Taming TSO Version 4 Menu Utilities Compilers Options Status Help ISPF Primary Option Menu Option ===> 0 0 Settings Terminal and user parameters User ID. : userid 1 View Display source data or listings Time... : 06:49 2 Edit Create or change source data Terminal. : Utilities Perform utility functions Screen.. : 1 4 Foreground Interactive language processing Language. : ENGLISH 5 Batch Submit job for language processing Appl ID. : ISR 6 Command Enter TSO or Workstation commands TSO logon : TRAINING Enter X to Terminate using log/list defaults Log/List Function keys Colors Environ Workstation Identifier Help ISPF Settings Command ===> Options Print Graphics Enter "/" to select option Family printer type 2 / Command line at bottom Device name.... / Panel display CUA mode Aspect ratio... 0 / Long message in pop-up / Tab to action bar choices / Tab to point-and-shoot fields General / Restore TEST/TRACE options Input field pad.. N / Session Manager mode Command delimiter. ; / Jump from leader dots / Edit PRINTDS Command / Always show split line Terminal Characteristics Screen format 1 1. Data 2. Std 3. Max 4. Part You can safely remove all the slashes Terminal Type A A Log/List Function keys Colors Environ Workstation Identifier Help

125 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 ENTER or PF3 will save your choices Terminal Characteristics Screen format 1 1. Data 2. Std 3. Max 4. Part Terminal Type A A Log/List Function keys Colors Environ Workstation Identifier Help ISPF Settings Command ===> Options Print Graphics Enter "/" to select option Family printer type 2 Command line at bottom Device name.... Panel display CUA mode Aspect ratio... 0 Long message in pop-up Tab to action bar choices Tab to point-and-shoot fields General Restore TEST/TRACE options Input field pad.. Terminal Type A A A T CF KN KN AR CY HN Put the cursor on LOG/LIST, press ENTER Log/List Function keys Colors Environ Workstation Identifier Help

126 Type 1 for LOG, press ENTER 1 1. Log Data set defaults tings 2. List Data set defaults 3. List Data set characteristics More: + 4. JCL... Print Graphics ' ' Family printer type 2 Command line at bottom Device name.... Panel display CUA mode Aspect ratio... 0 Long message in pop-up Tab to action bar choices Tab to point-and-shoot fields General Restore TEST/TRACE options Input field pad.. Session Manager mode Command delimiter. ; Jump from leader dots Edit PRINTDS Command Always show split line Log/List Function keys Colors Environ Workstation Identifier Help ISPF Settings Log Data Set Defaults Process option Print data set and delete : + 2. Delete data set (without printing) 3. Keep data set (append subsequent information to same data set) 4. Keep data set and allocate new data set SYSOUT class A Local printer ID or writer-name Lines per page Primary pages Secondary pages Log Message ID..... (/ = Yes) I suggest option 2 - to delete the log. Also put zeros on the pages to be printed Now to take care of the List Log/List Function keys Colors Environ Workstation Identifier Help ISPF Settings Command ===> 126

127 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 2. Std 3. Max 4. Part Terminal Type A A Put the cursor on LOG/LIST, press ENTER Type 2 for LIST, press ENTER Log/List Function keys Colors Environ Workstation Identifier Help Log Data set defaults tings 2. List Data set defaults 3. List Data set characteristics More: + 4. JCL... Print Graphics ' ' Family printer type 2 Command line at bottom Device name.... Panel display CUA mode Aspect ratio... 0 Long message in pop-up Tab to action bar choices Tab to point-and-shoot fields General Restore TEST/TRACE options Input field pad.. Session Manager mode Command delimiter. ; Log/List Function keys Colors Environ Workstation Identifier Help ISPF Settings List Data Set Defaults C Process option Print data set and delete : + O 2. Delete data set (without printing) 127

128 I suggest option 4 - do nothing with the List 3. Keep data set (append subsequent information to same data set) 4. Keep data set and allocate new data set SYSOUT class A Local printer ID or writer-name Lines per page Primary pages Secondary pages *** List already allocated *** 128

129 The Keys and Keylists If you want to have one set of keys and their meanings on every ISPF panel, you can disable keylists. If you prefer to have every panel with a different set of keys, leave things alone. In Settings, put the cursor on Function keys, press enter Log/List Function keys Colors Environ Workstation Identifier H Non-Keylist PF Key settings Command = 2. Keylist settings Tailor function key display Mor Options 4. Show all function keys Graphics Enter " 5. Show partial function keys ly printer type 2 Comm *. Remove function key display ce name.... Pane *. Use private and shared ct ratio... 0 / Long 8. Use only shared Tab 9. Disable keylists Tab *0. Enable keylists l Rest ' ' t field pad.. N Session Manager mode Command delimiter. ; / Jump from leader dots Edit PRINTDS Command Always show split line Menu RefList RefMode Utilities Workstation Help View Entry Panel Command ===> ISPF Library: Project... Group Type.... Member... (Blank or pattern for member selectio Other Partitioned or Sequential Data Set: 129

130 Data Set Name... Volume Serial... (If not cataloged) Workstation File: File Name..... Initial Macro.... Options Profile Name..... / Confirm Cancel/Move/Replace Format Name..... / Browse Mode Data Set Password.. View on Workstation 130

131 Removing Key Captions Command ===> PFSHOW OFF Scroll ===> PAGE Another suggestion: Get rid of the key captions from the bottom of your screen. since scrolling is unaware of the key captions (which means they hide important information!) Type PFSHOW OFF on any command line Table of Contents Creating a PDS/Library 2 Getting into the Editor 5 SDSF 8 The list of files, and a few Editing features 11 Taming TSO Version 4 15 Keys and keylists 21 Removing Key Captions 22 (Ver #Índice) 131

132 ANEXO 7- DESCRIPCION FILE STATUS EN ESPAÑOL Código Significado 00 No hay información adicional 02 La sentencia READ fue ejecutada satisfactoriamente, pero fue detectada una clave duplicada. 04 La sentencia READ fue ejecutada satisfactoriamente, pero el largo de registro procesado no corresponde 05 Una sentencia OPEN es ejecutada satisfactoriamente, pero el archivo referenciado no es está presente al momento de ejecutar el OPEN. Si el modo de apertura es I-O o EXTEND, el archivo se creará 10 Una sentencia secuencial READ fue intentada y no existe otro registro lógico en el archivo porque ha sido encontrado el fin de archivo. 12 Extensión IBM. No se encontró un registro de Subfile modificado 14 Una sentencia READ secuencial fue intentada para un archivo relativo y el número de dígitos significativos en el número relativo de registro fue más largo que el tamaño del ítem de datos de la clave relativa descrita para el archivo 21 Existe un error de secuencia para un archivo indexado accesado secuencialmente. El valor de la clave de registro ha sido cambiada por el programa entre la ejecución satisfactoria de una sentencia READ y la ejecución de la siguiente sentencia REWRITE para el archivo, o los requerimientos de orden ascendente para los valores claves de registro fueron violados. 22 Se intentó escribir un registro que creará una clave duplicada en un archivo relativo; o se intentó escribir o sebreescribir (WRITE/REWRITE) un registro que creará una clave de registro principal duplicada en un archivo indexado. CPF4759, CPF5008, CPF5026, CPF5034, CPF5084, CPF Se intentó hacer un acceso directo (Random) a un registro que no existe en el archivo. CPF5001, CPF5006, CPF5013, CPF5020, CPF Se intentó realizar una escritura más allá de los límites definidos externamente para un archivo relativo o indexado. Una sentencia secuencial WRITE fue intentada para un archivo relativo y el número de dígitos significativos en el número relativo de registro era más largo que el tamaño de la clave de registro relativo descrito para el archivo. CPF5006, CPF5018, CPF5021, CPF5043, CPF No hay información adicional. CPF4192, CPF5101, CPF102, CPF5129, CPF5030, CPF Existe un error permanente porque existe una violación, se intentó escribir más allá de los límite definidos externamente para un archivo secuencial. CPF5116, CPF5018, CPF5272, sí la organización es secuencial. 35 Se intentó una sentencia OPEN con la frase INPUT, I-O o EXTEND sobre un archivo no opcional que no está presente. CPF4101, CPF4102, CPF Se intento una sentencia OPEN sobre un archivo que no soporta el modo de apertura especificado en la sentencia OPEN. Posibles Violaciones son: La frase EXTEND o OUTPUT fue especificada pero el archivo no soporta operaciones de escritura. La frase I-O fue especificada pero el archivo no soporta las operaciones de entrada y salida permitidas. La frase INPUT fue especificada pero el archivo no soporta las operaciones de lectura. 38 Se intentó una sentencia OPEN sobre un archivo cerrado previamente con bloqueo (lock). 39 La sentencia OPEN no fue ejecutada satisfactoriamente debido a un conflicto entre los atributos del archivo físico y los atributos especificados para ése archivo en el programa. Comprobar error de nivel para el archivo. CPF4131

133 41 Se intentó una sentencia OPEN para el archivo en el modo de apertura. 42 Se intentó una sentencia CLOSE para un archivo que no está abierto. 43 Para un archivo secuencial, en el modo acceso secuencial, la última sentencia de entrada salida ejecutada para el archivo asociado previa a la ejecución de una sentencia REWRITE???. Para archivos relativos e indexados en el modo de acceso secuencial, la última sentencia de entrada-salida ejecutada para el archivo.???. 44 Una violación de??, existe porque se intento sobreescribir un registro en el archivo y el registro no es del mismo tamaño que el registro a reemplazar. 46 Se intentó una sentencia secuencial READ sobre un archivo que está abierto en el modo I-O sin haber establecido un registro válido debido a que la sentencia start no se ejecutó con éxito, la sentencia READ precedente fue insatisfactoria o causa una condición AT END. CPF5001, CPF5025, CPF La ejecución de una sentencia READ o START fuen intentada sobre un archivo que no está abierto en el modo INPUT o I-O. 48 La ejecución de una sentencia WRITE fue intentada sobre un archivo que no está abierto en el modo I-O, OUTPUT o EXTEND. 49 La ejecución de una sentencia DELETE o REWRITE fue intentada sobre un archivo que no está abiertoen el modo I-O. 90 Otros errores: Archivo no encontrado. Miembro no encontrado. Falta exepciones I-O. CPF4101, CPF4102, CPF4103 si un USE es aplicable para el archivo (sobre un no opcional con OPEN OUTPUT). Las siguientes excepciones se monitora genéricamente : CPF4101 al CPF4399 CPF4501 al CPF4699 CPF4701 al CPF4899 CPF4901 al CPF4999 CPF5001 al CPF5099 CPF5101 al CPF5399 CPF5501 al CPF5699 Estas excepciones causan un FILE STATUS = 90. Si un procedimiento USE es aplicable, se ejecuta. De otra manera, el programa termina y entrega al operador la excepción y la opción de cancelar, vaciado parcial o vaciado total de variables. 91 Tipo de acceso no definido o no autorizado. CPF2207, CPF4104, CPF4236, CPF5057, CPF5109, CPF5134, CPF Error lógico: Archivo bloqueado El archivo ya está abierto I-O para un archivo cerrado READ después de fin de archivo CLOSE para un archivo ya cerrado CPF4106, CPF4132, CPF4740, CPF5013, CPF5067, CPF5070, CPF5119, CPF5145, CPF5146, CPF5149, CPF5176, CPF

134 93 El archivo esta en conflicto con otro usuario. 94??? y la última operación no fue un READ satisfactorio. 95 Información del archivo inválido o incompleta. Se especifican claves duplicadas en el programa COBOL. El archivo ha sido abierto satisfactoriamente pero el archivo indexado de base de datos fue creado con clave única; o No se especificó clave duplicada en el programa COBOL, y el archivo de base de datos fue creado permitiendo claves duplicadas. 98 Grave errór interno en la estructura del fichero, generalmente se suelen provocar cuando hay un corte eléctrico o una salida brusca del programa y algún fichero indexado se ha quedado abierto, lo que suele ocurrir es problema de correspondencia entre claves y datos, se recomienda hacerle un RECOBERY (RM/COBOL) o el que corresponda a cada compilador para rehacer las claves. En algunos casos, es posible que éste error se deba a un problema físico del disco, en ese caso también será conveniente copiarlo en otro sitio "físico" 99 Al borrar, leer o reescribir un registro que está siendo bloqueado por otro usuario. 9 A El trabajo a sido cancelado de una manera controlada por comandos CL, CNLJOB, TRMSBS, TRMCPF, PWRDWNSYS. CPF4741 Se ha enviado un mensaje de escape durante una operación de entrada READ desde dispositivo de programa 9 C Falla de adquisición, la sección no ha partido o conectado. 9 D El registro está bloqueado CPF5027, CPF G Excepción de salida para dispositivo o sesión 9 H Operación ACQUIRE fallida.? Apropiado por otro programa o inhabilitado. (9H es el resultado cuando una operación ACQUIRE causa cualquiera de las excepciones monitoreadas para 90 o 9N cuando ocurre. 9 I Operación WRITE fallida CPF4702, CPF4737, CPF5052, CPF K Nombre de formato inválido, formato no encontrado CPF5022, CPF5023, CPF5053, CPF5054, CPF5121, CPF5152, CPF5153, CPF5186, CPF M Último registro escrito en Subfile CPF N Error temporal de I-O en hardware (potencialmente recuperable). Error durante la sesión de comunicaciones. CPF4145, CPF4146, CPF4193, CPF4229, CPF 4291, CPF4299, CPF4354, CPF4354, CPF4526, CPF4542, CPF5477, CPF4592, CPF4602, CPF4603, CPF4611, CPF4612, CPF4616, CPF4617, CPF4622, CPF4623, CPF4624, CPF4624, CPF4625, CPF4628, CPF4629, CPF4630, CPF4631, CPF4632, CPF4705, CPF5107, CPF5128, CPF5166, CPF5198, CPF5280, CPF5280, CPF5282, CPF5287, CPF5293, CPF5352, CPF5353, CPF5517, CPF5524, CPF5529, CPF5530, CPF5532, CPF P Open falló porque el archivo no puede ser ubicado bajo control??? CPF4293, CPF4326, CPF4327, CPF4328, CPF

135 ANEXO 8 -PROGRAMACION UTILIZANDO HOST Y ARQUITECTURA ISBAN 1. HOST 1.1 MANEJO DEL HOST. Accedemos haciendo un doble clic en el icono de escritorio Redb1. En la ventana que aparece ponemos TSOD NOMBRE_DE_USUARIO y pulsamos CONTROL. Aparece la siguiente ventana. En ella, donde pone PASSWORD ponemos nuestra contraseña y pulsamos CONTROL. 135

136 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 Pulsamos CONTROL de nuevo y aparece el menú inicial. 137

138 En el vamos a poner la opción 2 y pulsamos CONTROL para entrar en el menú general de desarrollo, que es el que vamos a usar siempre. 1.2 TECLAS DE FUNCION PARA USAR EL HOST. Las teclas de función que más se utilizan en los menús del HOST son las siguientes: F2 Abrir una nueva ventana del HOST. F3 Volver al menú anterior. F7 Visualizar el contenido de la pagina anterior. F8 Visualizar el contenido de la pagina siguiente. F9 Con esta tecla de función pasamos de una ventana abierta a otra. Aparece una ventana al pulsar esta tecla que permite abrir una nueva ventana colocando el cursor delante de start a new screen y pulsando CONTROL, o pasar de una ventana abierta a otra poniendo el cursor a la izquierda en la línea de la ventana que queremos visualizar y pulsando CONTROL. Notar que un * delante de una línea de ventana activa indica que esa es la ventana que actualmente estamos visualizando. (( PONER AQUI VENTANA F9))) F10 Ver el contenido de la izquierda de la ventana. F11 Ver el contenido de la derecha de la ventana. 1.3 COMANDOS PARA USAR EL HOST. En la línea de comandos podemos poner: 138

139 KEYS Muestra las asignaciones de las teclas de función para la ventana activa. SWAP LIST Muestra la ventana de listado de ventanas abiertas. Normalmente hace lo mismo que F9. SCRNAME nombre-ventana Pone el nombre-ventana a la ventana actual y se mostrará ese nombre en el listado de ventanas abiertas al pulsar F9. START Abre una nueva ventana directamente sin necesidad de acceder a través de F9 al listado de ventanas. 1.4 SALIR DE TSOD. Para salir de TSOD, pulsamos F3 hasta llegar al menú general de desarrollo y pulsamos como opción la X y CONTROL. Debemos cerrar todas las ventanas de sesión que hayamos abierto. (((En caso de que en alguna de ellas nos lleve hasta otro menú (ver imagen siguiente), al pulsar la X, indicaremos en esa ventana la opción 2 y pulsaremos CONTROL))). 1.5 MENÚ DE EDICIÓN. 139

140 A través del menú de edición podemos crear o editar un archivo para programar el código COBOL en él. Accedemos a través de la opción 2 desde el menú general de desarrollo. En la ventana que aparece, el panel de entrada del editor indicaremos la librería en la que vamos a trabajar. Una librería es la dirección donde se van a almacenar los archivos y se compone de distintos campos seguidos por un.. Si vamos a trabajar por ejemplo en la librería DES.ISWF.TRABAJO.INS.FTE, pondremos: En Proyect: DES.ISWF En Group: TRABAJO En Type: INS.FTE En Member: Nombre_del_archivo En Member pondremos el nombre del archivo donde vamos a escribir, si el archivo existe lo abrirá y si no existe lo creará y lo abrirá vacío. Pulsamos CONTROL. 140

141 NOTA: En el caso de que el nombre de la librería sea demasiado largo y no podamos ponerlo en proyect, group y type al editar, podemos borrar lo que contengan esas cuatro líneas y ponerlo en la línea de data set name con el nombre del documento entre paréntesis. Para editar el programa del ejemplo se pondrá en esa línea: DES.ISWF.TRABAJO.INS.FTE(NOMBRE_DEL_ARCHIVO) Ahora tenemos abierto el editor. 141

142 Línea de Numeración de Teclas de Vamos a ver como podemos utilizarlo. Existen tres formas de dar instrucciones al editor: La numeración de las líneas. Las opciones de escritura del texto vamos a indicarlas a través de la inserción de una serie de caracteres y números en la posición que queramos del editor dentro de la numeración de líneas. Así, si en esa columna, en una fila determinada ponemos por ejemplo una I, se insertará una línea debajo de esa fila donde podremos continuar escribiendo. Las opciones más habituales son: I Inserta una línea debajo de la línea donde hemos puesto la I. In Inserta n líneas a continuación de esta, siendo n el número de líneas. R Repite el contenido de esta línea en la línea de debajo. Rn Repite n veces esta línea debajo, siendo n el número de líneas. D Borra una línea. Dn Borra n líneas, siendo n el número de líneas. C Copia esta línea en el portapapeles. M Mover esta línea. La corta y la guarda en el portapapeles. A Escribe la línea o el bloque de líneas que hayamos copiado o movido debajo de ésta. B Escribe la línea o el bloque de líneas que hayamos copiado o movido encima de ésta. )) Mueve un espacio hacia la derecha el texto de esta línea. ))n Mueve n espacios hacia la derecha el texto de esta línea. 142

143 (( Mueve un espacio hacia la izquierda el texto de esta línea. ((n Mueve n espacios hacia la izquierda el texto de esta línea. Para bloques de texto se coloca dos caracteres indicativos de lo que queremos hacer en la primera línea del bloque y esos mismos caracteres en la última línea del bloque de texto. Por ejemplo: Borrar en bloque: Ponemos DD en la primera línea y DD en la última línea del bloque y al pulsar CONTROL se eliminará todo el contenido que haya entre ambas líneas. Copiar en bloque: Ponemos CC en la primera línea del bloque y CC en la última. Escribimos una A (after) o una B (befote) en la posición donde queremos copiar el bloque de texto dependiendo si queremos que se copie a continuación de esa línea o antes de la misma y pulsamos CONTROL. Mover en bloque: Se hace igual que copiar en bloque, pero en lugar de poner CC pondremos MM en la primera y la última línea del bloque. Desplazar a la izquierda o derecha un bloque de texto: Se pone ))n en la primera línea del bloque y ))n en la última línea del bloque y al pulsar CONTROL desplaza todo el texto del bloque n espacios a la izquierda. ( Si en lugar de poner ))n, se pone ((n, desplazará a la derecha). En la parte inferior de la pantalla del editor aparece la posición del cursor (el número de fila y el número de columna en la que se encuentra), pero esta posición no es la posición COBOL, por lo que debemos conocer la posición COBOL para no tener errores de sintaxis a la hora de realizar la compilación. Por ejemplo: Los 01 van en la posición COBOL 8. Los 05 en la posición cobol 12, igual que los niveles 88. Los 10 van en la posición cobol 16. Los 03 van en la posición cobol de los 05 desplazando todo a la posición del siguiente (el 05 pasaría a la posición del 10,...) Los comentarios (*) comienzan en la posición cobol 7. Los exec comienzan en la posicion COBOL 12. Para poder visualizar la posición COBOL, el editor nos muestra la regla para COBOL si ponemos COLS en la numeración de una línea. 143

144 La línea de mandatos. En la línea de mandatos vamos a indicar las operaciones que queremos realizar con este fichero o entre varios ficheros. Las que más utilizamos son: SAVE Guardar el contenido del documento. F texto Buscar un texto en el documento. Utilizando la tecla de función F5 continuará buscando el mismo texto a través del documento. CUT Copia al portapapeles un texto seleccionado mediante cc a través de la numeración de líneas para poder llevarlo posteriormente a otro documento. PASTE Pega un texto copiado mediante CUT en la posición de la línea indicada mediante una A o una B en la numeración de línea. L número_de_línea Posiciona el cursor en la línea del documento indicada por número de línea. CREATE Sale de la ventana de edición y muestra la ventana de librerías para indicar la librería y el nombre de programa con el que queremos crear el nuevo. El fichero nuevo se creara con todos las líneas indicadas mediante Cn en la numeración de línea y desde la posición en la que hayamos puesto la Cn. RES Quita los avisos que aparecen en las líneas superiores en el editor. HI COL Pone el editor en el modo de colores para que muestre las palabras reservadas, comentarios, cadenas de caracteres, errores,... en distintos colores. M (F8) Si escribimos una M en la línea de comandos y pulsamos la tecla de función F8, el cursor se mueve hasta la última línea escrita que exista en el documento. M(F7) Si escribimos una M en la línea de comandos y pulsamos la tecla de función F7, el cursor se mueve hasta la primera línea escrita que contenga el documento. NUM STD ON COBOL-> Con este comando estandarizamos la ventana de edición de código para COBOL, eliminando las primeras 6 columnas que están a continuación de la columna de numeración. Si ahora ponemos COLS, la numeración de COLS sería la misma que las posiciones indicadas por el cursor en la parte inferior izquierda de la pantalla. Esta opción no es recomendable cuando tengamos escrito texto a continuación de la numeración de pantalla ya que eliminará todo el trozo de texto que esté en las 6 primeras columnas. CANCEL Sale del editor sin guardar los cambios. DOS EJEMPLOS: 1. Copiar de un fichero a otro existente. a) Abrimos dos ventanas del editor, una con el documento desde el que queremos copiar y otra con el documento destino. b) Ponemos CC en la primera línea que queremos copiar y CC en la última línea del bloque a copiar. c) En la línea de comandos ponemos CUT. d) Nos vamos al documento destino y en la línea anterior a la posición donde queremos poner el bloque de texto escribimos una A. e) Ponemos en la línea de comando PASTE. 144

145 2. Crear un documento con la misma información de otro. a) Abrimos una ventana del editor con el documento desde el que queremos copiar. b) En la primera línea del documento ponemos C9999. c) En la línea de comandos ponemos CREATE. d) Sale de la ventana del editor y aparece una ventana de guardado en la que indicamos la información de la librería y el nombre del nuevo documento. NOTA: Si en lugar de utilizar C9999, utilizamos M9999 movemos el contenido del fuente al destino dejando el documento fuente vacío. Las teclas de Función. Las que más se utilizan: F3 Salir del editor. Guarda el documento cuando sale. F5 Si se ha indicado en la línea de comando F texto_a_buscar, permite seguir buscando el texto a través del documento. F7 Muestra la pantalla siguiente de contenido del documento. F8 Muestra la pantalla anterior de contenido del documento. F9 Abre el menú que permite pasar de una abierta a otra o abrir una nueva ventana. F10 Muestra el texto de la parte derecha de la pantalla. F11 Muestra el texto de la parte izquierda de la pantalla si lo hay. NOTA: Siempre que pongamos una orden en una línea o un comando debemos pulsar control para que se ejecute o borrarla si queremos cancelarla. 145

146 1.6 MENÚ DE MANEJO DE LIBRERIAS. A través de la opción 3 desde el Menú general de desarrollo entramos en el menú de selección de utilidades. Si ponemos la opción 4 entramos en la ventana de especificación de fichero. 146

147 A través de ella podemos acceder a las distintas librerías y archivos, permitiéndonos abrir los documentos en modo de edición y visualización o realizar copias de archivos desde una librería a otra sin necesidad de abrirlos. Para ello indicamos la librería principal y a través de ella podremos ir entrando en las que contiene. Por ejemplo, si queremos entrar a ver los documentos que contiene la librería DES.ISWF.TRABAJO.SWF.FTE, podemos poner lo siguiente: En Cualificador 1: DES En Cualificador 2: ISWF En Resto: TRABAJO.INS.FTE 147

148 Pulsamos CONTROL y en la ventana que aparece (DATA SET LIST UTILITY) volvemos a pulsar CONTROL. 148

149 Nos muestra la librería DES.ISWF.TRABAJO.INS cerrada. Para poder ver su contenido vamos a poner una V delante del nombre de la librería (en la columna de COMMAND) y pulsamos CONTROL. Se abre la librería y nos muestra un listado de los archivos que contiene. En el caso de que queramos editar alguno de ellos, pondremos una E delante de la línea donde aparece el nombre del documento y pulsaremos CONTROL. Si queremos solamente visualizarlo sin permiso para realizar modificaciones, entonces en lugar de una E pondremos una V. En ambos casos, se abrirá la ventana del editor mostrándonos el contenido del documento. Copiar un archivo. Si lo que queremos es copiarlo a otra librería, entonces pondremos una C delante y pulsaremos CONTROL. 149

150 Nos mostrará una nueva ventana, el panel de entrada de copia, en el que en CURRENT FROM DATA SET aparece la librería y el programa fuente que queremos copiar y a continuación nos aparecen tres líneas en las que vamos a especificar la librería destino: Por ej. supongamos que la librería destino es DES.ISWF.TRABAJO.SWF.FTE. En la sección TO LIBRARY pondremos: En Proyect: DES.ISWF En Group: TRABAJO En Type: SWF.FTE Si el fichero ya existe en esa librería nos dará un error, por lo que si queremos copiarlo y ya existe en Replace Option debemos poner una / indicando que remplace el miembro con el mismo nombre. Si no existe no es necesaria la /. Una vez indicada la librería de forma correcta, pulsamos CONTROL y de esta forma se ha copiado el archivo. Salimos con F3 al menú inicial de desarrollo y desde ahí podemos comprobar entrando de nuevo a través del menú de selección de utilidades si existe el nuevo archivo en la librería donde lo hemos copiado. 150

151 Renombrar un archivo. Si queremos renombrar el archivo, escribiremos una R y pulsaremos CONTROL. Aparecerá una ventana en la que mostrará el nombre actual y en la siguiente línea nos permitirá escribir el nombre nuevo. (((PONER PANTALLA DE RENOMBRAR AQUÍ))) Eliminar un archivo. Si lo que queremos es eliminar definitivamente un archivo ( Cuidado con esto!) entonces lo que haremos será poner una D delante y pulsar CONTROL. Nos aparece una ventana en la que se nos indica el archivo que vamos a eliminar y si pulsamos CONTROL se eliminará el archivo. Con F3 cancelamos la eliminación. (((PONER PANTALLA DE ELIMINAR FICHERO))) 1.7 MENÚ DE BÚSQUEDA DE CADENAS DE CARACTERES EN LIBRERIAS. 151

152 A través de la opción 3 desde el Menú general de desarrollo entramos en el menú de selección de utilidades. Si ponemos la opción 14 entramos en la Ventana de utilidades de búsquedas. 152

153 A través de ella podemos buscar cadenas de caracteres dentro de los ficheros existentes en una librería. Para ello, en la línea de SEARCH STRING pondremos la cadena de caracteres a buscar entre comillas simples. En ISPF LIBRARI indicaremos la librería donde queremos buscar. Podemos indicar una librería que contenga a otras para encontrar así más archivos. Por ejemplo, vamos a buscar la cadena BPBF en la librería DES.ISWF.TRABAJO.SWF.FTE. Para ello escribimos: En Search String: 'BPBF' Y dentro de ISPF Librari: En Proyect: DES.ISWF En Group: TRABAJO En Type: SWF.FTE Si hay algo escrito en la línea de Data Set Name, lo borramos y Pulsamos CONTROL. 153

154 Esperamos un poco de tiempo. Aparecerá un listado con el/los nombre/s de los fichero/s donde aparece la cadena y mostrará el párrafo en el que ha encontrado esa cadena dentro del documento. 1.8 VISUALIZAR LAS COPYS Y RUTINAS. Las COPYS y las RUTINAS (y algunos programas) existentes en la arquitectura las podemos visualizar en el editor. Para ello, en la línea de comandos del menú general de desarrollo ponemos: TSO LIBRARI y pulsamos CONTROL. 154

155 Aparece una ventana llamada Consulta Módulos de Librarian en la que podemos indicar en PROGRAMA/COPY una C (si es una COPY) o una P (si es una RUTINA o programa), y en NOMBRE MÓDULO el nombre de la COPY o RUTINA (o el programa). Pulsamos CONTROL. 155

156 En la ventana informativa que aparece podemos ver si ha encontrado el archivo que buscamos. Pulsamos de nuevo CONTROL. Si encuentra la COPY, la RUTINA o el programa se abre el editor mostrando el contenido del documento solicitado. Si no lo ha encontrado vuelve al menú general de desarrollo. 1.9 VISUALIZAR LA COLA DE FICHEROS DE COMPILACIÓN. Cuando compilamos un programa o hacemos un bind desde la Arquitectura ISBAN, la información sobre la terminación correcta o no y los archivos de compilación y bind se muestran en la cola del spool. Esta cola se visualiza desde el ISPF, por lo que tenemos que verla a través de TSOD. Para visualizar la cola, desde el menú general de desarrollo accedemos al submenú SDSF poniendo una S en la línea de opciones y pulsando CONTROL. 156

157 Entramos así en el menú de opciones primarias de SDSF. Ponemos una H y pulsamos CONTROL. Entramos en la ventana que muestra las salidas mantenidas de SDSF, es decir la cola del spool. 157

ENUNCIADO DEL PROBLEMA: ( realizado con Microfocus NetExpress) Implementar el siguiente programa Cobol sobre el censo de población:

ENUNCIADO DEL PROBLEMA: ( realizado con Microfocus NetExpress) Implementar el siguiente programa Cobol sobre el censo de población: ENUNCIADO DEL PROBLEMA: ( realizado con Microfocus NetExpress) Implementar el siguiente programa Cobol sobre el censo de población: El Instituto Nacional de Estadística está haciendo un estudio para descubrir

Más detalles

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES Tema 6. CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES TRANSACCIONES Una transacción es una unidad lógica de trabajo o procesamiento (ejecución de un programa que incluye operaciones de acceso a la base de

Más detalles

Tema 33. El lenguaje SQL

Tema 33. El lenguaje SQL Tema 33. El lenguaje SQL Introducción... 1 Modos de uso... 2 Ejecución de las sentencias SQL... 2 Instrucciones DDL Data Definition Language-... 3 Instrucciones DML Data Manipulation Language-... 4 Instrucciones

Más detalles

Desarrollo Cobol/DB2

Desarrollo Cobol/DB2 Desarrollo Cobol/DB2 Preparación de programas Precompilador DB2 Toma los postulados SQL del programa fuente Revisa la sintaxis de SQL Crea un programa fuente traducido de las sentencias SQL Crea el DBRM

Más detalles

INVITACIÓN TÉRMINOS DE REFERENCIA IP 032-2011 OBJETO DISEÑO Y EJECUCION DE UN PROGRAMA DE FORMACION EN COBOL

INVITACIÓN TÉRMINOS DE REFERENCIA IP 032-2011 OBJETO DISEÑO Y EJECUCION DE UN PROGRAMA DE FORMACION EN COBOL TÉRMINOS DE REFERENCIA IP 032-2011 OBJETO DISEÑO Y EJECUCION DE UN PROGRAMA DE FORMACION EN COBOL 1 1. OBJETIVO PEOPLE CONTACT S.A.. está interesada en recibir ofertas para el Diseño y Ejecución de un

Más detalles

INTRODUCCION A LOS SGBD

INTRODUCCION A LOS SGBD Parte Primera: INTRODUCCION A LOS SGBD Sistemas de Gestión de Bases de Datos Tabla Tabla Type Fila Tabla Type Fila Tabla text Fila Type Fila Fila text Type Fila Tabla Tabla Fila text Fila text Fila Fila

Más detalles

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1 Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER GUÍA 2 Pág. 1 I. OBJETIVOS Utilizar procedimientos almacenados Conocer el uso de los cursores

Más detalles

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1 UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEM LABORATORIO DE BES DE DATOS 1 Prof. Marco Aedo Práctica de Laboratorio Nº 6 I. OBJETIVOS

Más detalles

Enlaces relacionados: http://otn.oracle.com/tech/pl_sql/index.html

Enlaces relacionados: http://otn.oracle.com/tech/pl_sql/index.html 1.INTRODUCCION PL/SQL (Procedural Language ó Programming Language, según distintas fuentes, aunque la oficial es la primera) es el lenguaje utilizado por Oracle como extensión al SQL, y que nos va a permitir

Más detalles

CLIST (I) - CLIST_P1.DOC : 1 - 0.- Entradilla

CLIST (I) - CLIST_P1.DOC : 1 - 0.- Entradilla CLIST (I) 0.- Entradilla El lenguaje de CLIST es un lenguaje de programación más. Esta razón, junto con las de sencillez, potencia y desconocimiento entre los programadores, han hecho que el autor elija

Más detalles

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo: TEMA 7.- EL ESTANDAR SQL. El Sublenguaje de Manipulación. El Sublenguaje de Definición. El Sublenguaje de Control. El Sublenguaje Huésped. 1. El Sublenguaje de Manipulación. (Se verá en la clase de problemas)

Más detalles

SQL EMBEBIDO FELIPE GARCÍA GÓMEZ

SQL EMBEBIDO FELIPE GARCÍA GÓMEZ UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA SQL EMBEBIDO FELIPE GARCÍA GÓMEZ Profesor: Asignatura: Titulación: Fecha: D. Francisco Ruiz González Bases de Datos Ing. Sup. Informática

Más detalles

Cómo abrir la base de datos de Aspel-SAE 5.0?

Cómo abrir la base de datos de Aspel-SAE 5.0? Cómo abrir la base de datos de Aspel-SAE 5.0? 1 Herramientas de administración nativas de Firebird. Firebird cuenta con una herramienta llamada ISQL la cual es una consola de línea de comandos desde la

Más detalles

Oracle básico (IV): Programación en PL/SQL

Oracle básico (IV): Programación en PL/SQL Oracle básico (IV): Programación en PL/SQL El lenguaje de programación de Oracle, llamado PL/SQL, es un lenguaje portable, procedural y de transacción muy potente y de fácil manejo, con las siguientes

Más detalles

Cómo abrir las bases de datos en Aspel-COI 6.0?

Cómo abrir las bases de datos en Aspel-COI 6.0? Cómo abrir las bases de datos en Aspel-COI 6.0? 1. Herramientas de administración nativas de Firebird. Firebird cuenta con una herramienta llamada ISQL la cual es una consola de línea de comandos desde

Más detalles

Cómo abrir las bases de datos de Aspel-NOI 5.0?

Cómo abrir las bases de datos de Aspel-NOI 5.0? Cómo abrir las bases de datos de Aspel-NOI 5.0? 1. Herramientas de administración nativas de Firebird. Firebird cuenta con una herramienta llamada ISQL la cual es una consola de línea de comandos desde

Más detalles

AcuSQL Pre-compilador de SQL Embebido

AcuSQL Pre-compilador de SQL Embebido AcuSQL Pre-compilador de SQL Embebido RESUMEN EJECUTIVO AcuSQL es una sencilla y rentable solución para aquellos que utilizan sentencias SQL embebidas en sus programas COBOL para acceder fuentes de datos

Más detalles

Oracle Database 10g: Taller de Administración I 1-2

Oracle Database 10g: Taller de Administración I 1-2 Oracle Database 10g: Taller de Administración I 1-2 Estructuras lógicas y físicas de la BD Bloque dedatosoracle:eselnivellógico másfinodegranularidad,dondesealmacenanlosdatosdelabd. Un bloquededatosse

Más detalles

TEMA 4.4: Recuperación ante fallos

TEMA 4.4: Recuperación ante fallos TEMA 4.4: Recuperación ante fallos a.- Introducción b.- Transacción: concepto y procesamiento c.- Recuperación - Concepto de Recuperación - Estructuras de Recuperación: - Ficheros Redo Log - Ficheros de

Más detalles

FIREBIRD: SQL PROCEDIMENTAL (PSQL)

FIREBIRD: SQL PROCEDIMENTAL (PSQL) FIREBIRD: SQL PROCEDIMENTAL (PSQL) Vicente Tejero Trueba Pag 1 IES Pedro Espinosa FIREBIRD: SQL PROCEDIMENTAL (PSQL) 1.- INTRODUCCION...1 2.- EXTENSIONES DEL LENGUAJE...2 2.1.- Terminadores...2 2.2.- Variables...3

Más detalles

PRÁCTICA DE ADMINISTRACIÓN DE BASES DE DATOS

PRÁCTICA DE ADMINISTRACIÓN DE BASES DE DATOS PRÁCTICA DE ADMINISTRACIÓN DE BASES DE DATOS Modulo 1.- CONFIDENCIALIDAD DE LOS DATOS El objetivo de esta parte de la práctica es comprender los distintos mecanismos que se pueden utilizar en ORACLE 10g

Más detalles

CURSO DE SQL SERVER 2005

CURSO DE SQL SERVER 2005 CURSO DE SQL SERVER 2005 Una vez finalizado el curso, el alumno estará preparado para: Instalar y configurar SQL Server 2005. Comprender los conceptos más importantes del diseño de bases de datos. Crear

Más detalles

Acceso a bases de datos MySQL con PHP

Acceso a bases de datos MySQL con PHP GESTIÓN Y ADMINISTRACIÓN WEB Acceso a bases de datos MySQL con PHP Ing. CIP Fabián Silva Alvarado fsilvasys@hotmail.com DEFINICIÓN DE BASE DE DATOS Base de Datos es un conjunto de datos relacionados entre

Más detalles

SQL (Structured Query Language)

SQL (Structured Query Language) SQL (Structured Query Language) El lenguaje de consulta estructurado o SQL (por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite

Más detalles

DICCIONARIO DE DATOS

DICCIONARIO DE DATOS DICCIONARIO DE DATOS Diccionario de datos El diccionario de datos es la fuente de información centralizada de todo el sistema SAP, allí se encuentra (y almacena) todos los datos que se procesan en el sistema;

Más detalles

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ;

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ; 7. CONCEPTOS AVANZADOS DE CURSORES EXPLICITOS En este capítulo veremos algunas cosas bastante útiles respecto a los cursores explícitos, como pueden ser los cursores con parámetros (que nos permitirán

Más detalles

PRÁCTICA B2. Definición y modificación de datos en SQL

PRÁCTICA B2. Definición y modificación de datos en SQL 3º Ingeniero Técnico en Informática de Sistemas Facultad de Informática Asignatura: Fundamentos de Bases de Datos Curso: 2007/08 PRÁCTICA B2. Definición y modificación de datos en SQL Objetivos Construir

Más detalles

ADMINISTRACIÓN DE BASE DE DATOS

ADMINISTRACIÓN DE BASE DE DATOS SQL SERVER T-SQL QUERY s es ADMINISTRADOR GRÁFICO SGBD Elementos objetos Tablas Procedimientos Triggers Funciones Usuarios Permiso Roles Contraseñas Programas DTS (Data Transfer System) Exportación e Importación

Más detalles

Bases de Datos / Elementos de Bases de Datos 2011. Que es un Stored Procedure? Stored Procedures: Ventajas

Bases de Datos / Elementos de Bases de Datos 2011. Que es un Stored Procedure? Stored Procedures: Ventajas Bases de Datos / Elementos de Bases de Datos 2011 Stored Procedures, Triggers y Transacciones en MySQL Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 1 Que es un Stored

Más detalles

Unidad didáctica 2: Metodologías de desarrollo de Bases de Datos. Unidad didáctica 1: Fase de análisis de requisitos Modelo E/R

Unidad didáctica 2: Metodologías de desarrollo de Bases de Datos. Unidad didáctica 1: Fase de análisis de requisitos Modelo E/R índice Módulo A Unidad didáctica 1: Introducción a las Bases de Datos Unidad didáctica 2: Metodologías de desarrollo de Bases de Datos 3 19 Módulo B Unidad didáctica 1: Fase de análisis de requisitos Modelo

Más detalles

MANUALITO MS-SQL SERVER

MANUALITO MS-SQL SERVER MANUALITO MS-SQL SERVER Contenido 1. Crear Store Procedures en MS SQL Server... 1 2. Crear Triggers en MS SQL Server... 5 3. Crear Vistas en MS SQL Server... 9 1. Crear Store Procedures en MS SQL Server

Más detalles

Tema 6. Transacciones y seguridad

Tema 6. Transacciones y seguridad Tema 6. Transacciones y seguridad Las aplicaciones de bases de datos a gran escala, con bases de datos de gran tamaño y con cientos de usuarios concurrentes, como los sistemas de reservas, los bancos,

Más detalles

ITINERARIO FORMATIVO: PROGRAMADOR DE APLICACIONES COBOL ÍNDICE

ITINERARIO FORMATIVO: PROGRAMADOR DE APLICACIONES COBOL ÍNDICE ITINERARIO FORMATIVO: PROGRAMADOR DE APLICACIONES COBOL DURACIÓN: 250 HORAS. MODALIDAD: DISTANCIA / TELEFORMACIÓN ÍNDICE FICHA TÉCNICA RESUMIDA... 2 FICHA TÉCNICA ORIENTADA AL SISTEMA NAC. DE CUALIFICACIONES...14

Más detalles

MS_20461 Querying Microsoft SQL Server

MS_20461 Querying Microsoft SQL Server Gold Learning Gold Business Intelligence Silver Data Plataform www.ked.com.mx Por favor no imprimas este documento si no es necesario. Introducción. Este curso proporciona a los estudiantes las habilidades

Más detalles

Bases de datos: Sistemas de bases de datos:

Bases de datos: Sistemas de bases de datos: Bases de datos: Sistemas de bases de datos: Un sistema de bases de datos es básicamente un sistema para archivar en computador, es decir, es un sistema computarizado cuyo propósito general es mantener

Más detalles

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL. GUIA DE LABORATORIO # 5 Nombre de la Practica: Manipulación de datos Lugar de ejecución: Centro de Computo MATERIA: Base de Datos II CICLO: 02-2012 I. OBJETIVOS ESPECIFICOS Qué el estudiante: Manipule

Más detalles

SQL Los fundamentos del lenguaje

SQL Los fundamentos del lenguaje Introducción 1. Un poco de historia 11 2. Las normas SQL 12 3. Descripción rápida del modelo relacional 14 3.1 Principales conceptos del modelo relacional 15 3.2 Principales reglas 16 4. Los operadores

Más detalles

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008 Base de Datos I SQL PROCEDURAL Triggers y Stored Procedures Ing. Gustavo A. Correa Reina UNCPBA 2008 SQL Procedural Posibilita el uso de código procedural conjuntamente con sentencias SQL que son almacenadas

Más detalles

ADMINISTRACION DE BASES DE DATOS EN ORACLE

ADMINISTRACION DE BASES DE DATOS EN ORACLE SQL LENGUAJE ESTRUCTURADO DE CONSULTA El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un modelo de datos relacional para grandes bancos de datos compartidos". Ese libro

Más detalles

BASES DE DATOS I. Manual de Informix. Informix Personal Edition 7.22 1

BASES DE DATOS I. Manual de Informix. Informix Personal Edition 7.22 1 Informix Personal Edition 7.22 1 El objetivo de este documento consiste en ofrecer una visión general de las herramientas y funcionalidades que incorpora el software Informix Personal 7.22, una vez hayáis

Más detalles

A.1. Definiciones de datos en SQL

A.1. Definiciones de datos en SQL A.1. Definiciones de datos en SQL Las Sentencias del lenguaje de definición de datos (DDL) que posee SQL operan en base a tablas. Las Principales sentencias DDL son las siguientes: CREATE TABLE DROP TABLE

Más detalles

ÍNDICE. Introducción... Capítulo 1. Novedades de Access 2013... 1

ÍNDICE. Introducción... Capítulo 1. Novedades de Access 2013... 1 Introducción... XIII Capítulo 1. Novedades de Access 2013... 1 Nuevas posibilidades de cifrado, compactación y reparación de archivos... 1 Trabajo en la nube... 2 Compartir la información... 3 Guardar

Más detalles

Base de Datos. Profesor: José Miguel Rubio L. P. UNIVERSIDAD CATÓLICA DE VALPARAÍSO FACULTAD DE INGENIERÍA ESCUELA DE ING.

Base de Datos. Profesor: José Miguel Rubio L. P. UNIVERSIDAD CATÓLICA DE VALPARAÍSO FACULTAD DE INGENIERÍA ESCUELA DE ING. P. UNIVERSIDAD CATÓLICA DE VALPARAÍSO FACULTAD DE INGENIERÍA ESCUELA DE ING. INFORMÁTICA Base de Datos Usuario A Programa de Aplicación Bodega Usuario B Usuario N Insumo Proveedor Profesor: José Miguel

Más detalles

Tutorial Oracle SQL Developer 1.2.1

Tutorial Oracle SQL Developer 1.2.1 Tutorial Oracle SQL Developer 1.2.1 Departamento de Informática Índice Í0. Introducción...3 1. Conexión y desconexión de la base de datos...3 2. Ejecución de sentencias SQL...4 3. Creación de tablas...6

Más detalles

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008 TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008 ESTRUCTURA DEL SEMINARIO Modulo 1: Crear y administrar una base de datos SQL Server Métodos para crear una base de datos SQLServer.

Más detalles

Unidad 1: Conceptos generales de Sistemas Operativos.

Unidad 1: Conceptos generales de Sistemas Operativos. Unidad 1: Conceptos generales de Sistemas Operativos. Tema 3: Estructura del sistema operativo. 3.1 Componentes del sistema. 3.2 Servicios del sistema operativo. 3.3 Llamadas al sistema. 3.4 Programas

Más detalles

SINTAXIS DE SQL-92. ::= CREATE SCHEMA [ ... ]

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ] SINTAXIS DE SQL-92 Introducción: Se presenta brevemente un resumen de la sintaxis de SQL según el estándar ISO 9075 (SQL- 92), dividido en tres partes: - Lenguaje de Definición de Daots (LDD), - Lenguaje

Más detalles

8 SQL SERVER 2008 RA-MA

8 SQL SERVER 2008 RA-MA ÍNDICE Capítulo 1. Características, novedades y entorno de trabajo... 17 1.1 Novedades en SQL Server 2008... 17 1.2 Instalación de Microsoft SQL Server 2008... 19 1.3 Versiones de Microsoft SQL Server

Más detalles

Tema: Disparadores Parte I.

Tema: Disparadores Parte I. Base de datos I. Guía 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Base de datos I Tema: Disparadores Parte I. Objetivo Utilizar la sintaxis de un disparador en SQL Server Implementar transacciones

Más detalles

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle: PL/SQL (Procedural Language/Structured Query Language) PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los

Más detalles

Recuperación de instancias dañadas usando RMAN

Recuperación de instancias dañadas usando RMAN Recuperación de instancias dañadas usando RMAN Isabel Terrero Gómez SGBD 1 Herramientas de recuperación : Ficheros redo logs: Ficheros de cambio de almacenamiento en la BD (Recovery). Se almacenan los

Más detalles

Curso de introducción a Oracle Application Express. Disertante: A.S. Ezequiel Portela

Curso de introducción a Oracle Application Express. Disertante: A.S. Ezequiel Portela Curso de introducción a Oracle Disertante: A.S. Contenidos Sobre el Curso... 4 Qué es APEX?... 4 Introducción al Curso... 4 Requisitos... 5 Modalidad... 5 Módulo 1: Fundamentos de Oracle SQL y PLSQL...

Más detalles

Clase 1: Estructuras, Procesos y Diccionario de Datos

Clase 1: Estructuras, Procesos y Diccionario de Datos Clase 1: Estructuras, Procesos y Diccionario de Datos Estructura de la memoria System Global Area Buffer Cache Redo Log Buffer Share Pool Dictionary Cache Large Pool Process Global Area Private SQL Area

Más detalles

Comencemos a programar con. Entrega 10. Estructuras de Control II

Comencemos a programar con. Entrega 10. Estructuras de Control II Comencemos a programar con VBA - Access Entrega 10 Estructuras de Control II Eduardo Olaz 10-2 Estructuras de Control, segunda parte Las Instrucciones While - - - Wend La estructura de bucle For Contador

Más detalles

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros La sentencia INSERT permite agregar nuevas filas de datos a las tablas existentes. Está sentencia

Más detalles

Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando su:

Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando su: CURSO DE ORACLE DESCRIPCIÓN Oracle es un sistema de gestión de base de datos relacional (o RDBMS por el acrónimo en inglés de Relational Data Base Management System), desarrollado por Oracle Corporation.

Más detalles

ADMINISTRACIÓN DE BASES DE DATOS PREGUNTAS TEST SON SOLUCIÓN

ADMINISTRACIÓN DE BASES DE DATOS PREGUNTAS TEST SON SOLUCIÓN ADMINISTRACIÓN DE BASES DE DATOS PREGUNTAS TEST SON SOLUCIÓN 1. En el SGBD Oracle. Cuál de las siguientes afirmaciones es correcta? a) Los usuarios con el rol de administrador de la base de datos son SYS,

Más detalles

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos.

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos. 8. PAQUETES DE BASE DE DATOS Los paquetes nos van a permitir agrupar conceptos PL/SQL como pueden ser tipos, procedimientos y funciones. Por ejemplo: una paquete de Contabilidad podrá contener procedimientos

Más detalles

INDICE Primera Parte. Panorámica general de SQL 2. Rápido repaso de SQL 3. SQL en Perspectiva

INDICE Primera Parte. Panorámica general de SQL 2. Rápido repaso de SQL 3. SQL en Perspectiva INDICE Prólogo XXIII Por qué este libro es para usted XXVII Primera Parte. Panorámica general de SQL 1 1. Introducción 3 El lenguaje SQL 3 El papel de SQL 6 Características y beneficios de SQL 7 Independencia

Más detalles

Introducción al SQL embebido

Introducción al SQL embebido Introducción al SQL embebido Bases de Datos II 1 Índice 1. Introducción. 2. Estructura típica de un programa 3. Declaración de variables. 4. Utilización de SQL embebido. Sentencias básicas Uso de cursores

Más detalles

ESCUELA SUPERIOR DE INFORMATICA Prácticas de Estadística UNA SESIÓN EN SPSS

ESCUELA SUPERIOR DE INFORMATICA Prácticas de Estadística UNA SESIÓN EN SPSS UNA SESIÓN EN SPSS INTRODUCCIÓN. SPSS (Statistical Product and Service Solutions) es un paquete estadístico orientado, en principio, al ámbito de aplicación de las Ciencias sociales, es uno de las herramientas

Más detalles

CONSULTAS BASICAS EN SQL SERVER

CONSULTAS BASICAS EN SQL SERVER CONSULTAS BASICAS EN SQL SERVER CONSULTAS DE SELECCION Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta

Más detalles

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints Crear Una Base De Datos (L12) A TRAVÉS DE LA CONSOLA DE ADMINISTRACIÓN A TRAVÉS DEL ASISTENTE DE BASES DE DATOS (DATABASE WIZARD) A TRAVÉS DE COMANDOS SQL (CREATE DATABASE, CREATE TABLE) Crear Un Grupo

Más detalles

BANCO DE PREGUNTAS PARA EVALUACIÓN DE CONOCIMIENTOS DEL CONCURSO DE MÉRITOS Y OPOSICIÓN EXPERTO EN DESARROLLO DE SISTEMAS 1

BANCO DE PREGUNTAS PARA EVALUACIÓN DE CONOCIMIENTOS DEL CONCURSO DE MÉRITOS Y OPOSICIÓN EXPERTO EN DESARROLLO DE SISTEMAS 1 BANCO DE PREGUNTAS PARA EVALUACIÓN DE CONOCIMIENTOS DEL CONCURSO DE MÉRITOS Y OPOSICIÓN EXPERTO EN DESARROLLO DE SISTEMAS 1 1. Cuáles de los siguientes enunciados son declaraciones válidas? 2. Cuál de

Más detalles

MultiBase Cosmos. Notas a la versión 4.4, release 1. BASE 100, S.A. www.base100.com

MultiBase Cosmos. Notas a la versión 4.4, release 1. BASE 100, S.A. www.base100.com MultiBase Cosmos Notas a la versión 4.4, release 1 BASE 100, S.A. www.base100.com Índice IMPLEMENTACIONES... 3 MÉTODOS DE LA CLASE SIMPLECONTROL... 4 MÉTODOS DE LA CLASE INTEGER... 4 MÉTODOS DE LA CLASE

Más detalles

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES EL LENGUAJE SQL. INSTRUCCIONES DE DEFINICIÓN DE. INSTRUCCIONES DE INSERCIÓN, MODIFICACIÓN Y BORRADO.. CREACIÓN Y UTILIZACIÓN DE VISTAS... PROCEDIMIENTOS. EL LENGUAJE SQL 1 EL LENGUAJE SQL 2 SQL ES UN LENGUAJE

Más detalles

GALA CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) No Consultas. Definiciones Transacciones ( L33 )

GALA CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) No Consultas. Definiciones Transacciones ( L33 ) Definiciones Transacciones ( L33 ) CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) Transacciones En Microsoft ( L33 ) MANUAL (REQUIERE PROGRAMACION) AUTOMATICO (COM+ O DTM) DTM (DISTRIBUTED TRANSACTION

Más detalles

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas. Vistas. El resultado de una consulta en el caso de SQL siempre es una tabla, ésta se puede hacer permanente dentro de la base de datos. En este caso se dice que esta tabla resultado es una vista o una

Más detalles

INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER 2005. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER 2005. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER 2005 Manual de Referencia para usuarios Salomón Ccance CCANCE WEBSITE INTRODUCCIÓN AL SQL. TRANSACT SQL CONCEPTOS BÁSICO DE SQL SQL (Structured Query Language),

Más detalles

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006 Bases de Datos SQL 1 SQL Jorge Pérez R. Universidad de Talca, II Semestre 2006 Bases de Datos SQL 2 SQL + Procedural La mayoría de los DBMS actuales permiten extensiones de SQL para la creación de bloques

Más detalles

PROGRAMA DE CURSO DE FORMACIÓN PROFESIONAL OCUPACIONAL

PROGRAMA DE CURSO DE FORMACIÓN PROFESIONAL OCUPACIONAL MINISTERIO DE TRABAJO Y ASUNTOS SOCIALES PROGRAMA DE CURSO DE FORMACIÓN PROFESIONAL OCUPACIONAL Administrador de bases de datos DATOS GENERALES DEL CURSO 1. Familia profesional: INFORMÁTICA Área profesional:

Más detalles

AcuBench Ambiente Integrado de Desarrollo

AcuBench Ambiente Integrado de Desarrollo AcuBench Ambiente Integrado de Desarrollo RESUMEN EJECUTIVO El ambiente de desarrollo integrado (IDE) de AcuBench ofrece una interface gráfica a todas las herramientas del sistema de desarrollo ACUCOBOL-GT,

Más detalles

Laboratorio Informix. Stored Procedures Triggers

Laboratorio Informix. Stored Procedures Triggers Laboratorio Informix Stored Procedures Triggers Repaso A partir del ER, hicimos las tablas de la base de datos. Creamos en MySql las base de datos y las tablas Hicimos una aplicación que se comunica con

Más detalles

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo - 2011

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo - 2011 Structured Query Language () Fundamentos de Bases de Datos InCo - Un poco de historia Lenguajes de consulta relacionales: SEQUEL (IBM-1970) QUEL (Ingres-1970) QBE (IBM-1970) es el lenguaje comercial más

Más detalles

Comandos básicos MS-DOS

Comandos básicos MS-DOS Comandos básicos MS-DOS Inicio Para iniciar DOS en Windows XP, hay que irse al botón de Inicio, Ejecutar y poner cmd. Se abrirá una ventana de DOS en la que se probarán todas las opciones de los comandos

Más detalles

Base de datos relacional

Base de datos relacional Base de datos relacional Una base de datos relacional es una base de datos que cumple con el modelo relacional, el cual es el modelo más utilizado en la actualidad para modelar problemas reales y administrar

Más detalles

Bases de Datos 2. Teórico

Bases de Datos 2. Teórico Bases de Datos 2 Teórico Structured Query Language (SQL) Características de SQL Standard Opera sobre conjuntos de tuplas: incluso para las operaciones de inserción, borrado y actualización. No elimina

Más detalles

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA ÍNDICE CAPÍTULO 1. CARACTERÍSTICAS, NOVEDADES Y ENTORNO DE TRABAJO...17 1.1 NOVEDADES EN SQL SERVER 2008 R2...17 1.2 INSTALACIÓN DE MICROSOFT SQL SERVER 2008 R2...18 1.3 VERSIONES DE MICROSOFT SQL SERVER

Más detalles

Diseño y Admón. de Bases de Datos. Ingeniería Informática curso 2010/11

Diseño y Admón. de Bases de Datos. Ingeniería Informática curso 2010/11 Laboratorio 06. Objetivos: Representación interna de un BD. Tablas, índices e índices full-text. Sesiones: 1 (24 de noviembre de 2010) Ejercicio: 1. Representación interna: 1.1. Copiar al repositorio de

Más detalles

Tema 3: Bases de datos en Entorno Web

Tema 3: Bases de datos en Entorno Web Tema 3: Bases de datos en Entorno Web 1. Introducción. Un sistema de bases de datos proporciona un control centralizado de los datos. Esto contrasta con la situación que prevalece actualmente, donde a

Más detalles

UNIDAD DE TRABAJO 3: PROGRAMACIÓN DE BASES DE DATOS TEMA 8: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN

UNIDAD DE TRABAJO 3: PROGRAMACIÓN DE BASES DE DATOS TEMA 8: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN UNIDAD DE TRABAJO 3: PROGRAMACIÓN DE BASES DE DATOS TEMA 8: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN 8.1. INTRODUCCIÓN AL SQL PROCEDIMENTAL Casi todos los grandes Sistemas Gestores de Datos incorporan

Más detalles

DataBase Administration

DataBase Administration DataBase Administration 1. FUNCIONES DE UN DBA (Data Base Administrator) El rol de DBA involucra las siguientes tareas: Creación de Bases y Tablas Base de Datos Verificar el lugar de creación, en los espacios

Más detalles

2.6.2.- Aplicaciones de las vistas. 2.6.1.- Concepto de vista. 2.6.3.- Vistas en SQL. 2.6.3.- Vistas en SQL.

2.6.2.- Aplicaciones de las vistas. 2.6.1.- Concepto de vista. 2.6.3.- Vistas en SQL. 2.6.3.- Vistas en SQL. 2.6.1.- Concepto de vista. Una vista es una tabla derivada de otras tablas (básicas o virtuales). Una vista se caracteriza porque: Se considera que forma parte del esquema externo. Una vista es una tabla

Más detalles

EL ENTORNO DE TRABAJO SQL ORACLE

EL ENTORNO DE TRABAJO SQL ORACLE PREVIO 2 EL ENTORNO DE TRABAJO SQL ORACLE Y LENGUAJE DE DEFINICIÓN DE DATOS DDL) INTRODUCCIÓN A ORACLE Oracle10g es de las últimas versiones de esté manejador de base de datos, incorpora la tecnología

Más detalles

Estructura de una BD Oracle. datafiles redo log controlfiles tablespace objetos Estructura lógica. Tablespaces tablespace SYSTEM

Estructura de una BD Oracle. datafiles redo log controlfiles tablespace objetos Estructura lógica. Tablespaces tablespace SYSTEM Estructura de una BD Oracle. Una BD Oracle tiene una estructura física y una estructura lógica que se mantienen separadamente. La estructura física se corresponde a los ficheros del sistema operativo:

Más detalles

Base de Datos Oracle: desarrollo de aplicaciones

Base de Datos Oracle: desarrollo de aplicaciones Base de Datos Oracle: desarrollo de aplicaciones Oracle Pro-C/C++ Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos

Más detalles

Bases de Datos 3º Informática de Sistemas

Bases de Datos 3º Informática de Sistemas TEMA 2.- EL SISTEMA GESTOR DE BASES DE DATOS. Concepto y Funciones del SGBD. Lenguajes de los SGBD. Niveles de Abstracción. Arquitectura ANSI/SPARC. Componentes del SGBD. 1. Concepto y Funciones del SGBD.

Más detalles

1.264 Tema 8. SQL (cont.) ODBC

1.264 Tema 8. SQL (cont.) ODBC 1.264 Tema 8 SQL (cont.) ODBC Subconsultas Las subconsultas de SQL nos permiten utilizar los resultados de una consulta como parte de otra. Subconsultas: A menudo, constituyen un modo natural de escribir

Más detalles

MANUAL BÁSICO DE ORACLE

MANUAL BÁSICO DE ORACLE MANUAL BÁSICO DE ORACLE ESCUELA COLOMBIANA DE INGENIERÍA JULIO GARAVITO LABORATORIO DE INFORMÁTICA BOGOTÁ D. C. 2007-2 TABLA DE CONTENIDO INTRODUCCIÓN... 3 1. TIPOS DE DATOS... 4 1.1 TIPOS DE DATOS ALFANUMÉRICOS...

Más detalles

SQL básico. SQL básico http://idesweb.es/ 1. Contenido

SQL básico. SQL básico http://idesweb.es/ 1. Contenido SQL básico http://idesweb.es/ 1 SQL básico El presente documento no tiene más aspiraciones que servir de recordatorio mínimo para las órdenes más básicas y en su mínima expresión. No es un manual de SQL

Más detalles

INTRODUCCIÓN. En la actualidad existe un gran número de herramientas para el desarrollo de un

INTRODUCCIÓN. En la actualidad existe un gran número de herramientas para el desarrollo de un 1 2 iv INTRODUCCIÓN. En la actualidad existe un gran número de herramientas para el desarrollo de un sistema informático, cada una tiene sus ventajas y desventajas, lo importante es saber seleccionar lo

Más detalles

Teknoda - Notas técnicas Tips de AS400 iseries System i Tip Nro. 40

Teknoda - Notas técnicas Tips de AS400 iseries System i Tip Nro. 40 http://www.teknodatips.com.ar Teknoda - Notas técnicas Tips de AS400 iseries System i Tip Nro. 40 (Lo nuevo, lo escondido, o simplemente lo de siempre pero bien explicado) Notas técnicas de AS/400" se

Más detalles

1. Módulos de Funciones

1. Módulos de Funciones 1. Módulos de Funciones 1.1 Introducción Los módulos de funciones son objetos que realizan operaciones que pueden ser utilizadas en varios programas. Al crear un módulo de función con el código que realiza

Más detalles

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5 APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5 APLICACIONES WEB BASADAS EN PHP Y MYSQL Una aplicación web es básicamente un programa escrito sobre una página web, generalmente en lenguaje

Más detalles

Tema 1. Conceptos básicos

Tema 1. Conceptos básicos Conceptos básicos Sistema de Gestión de Bases de Datos, SGBD (DBMS, Database Management System): software diseñado específicamente para el mantenimiento y la explotación de grandes conjuntos de datos 1

Más detalles

PROYECTO ADMINISTRACIÓN ORACLE ENTERPRISE MANAGER

PROYECTO ADMINISTRACIÓN ORACLE ENTERPRISE MANAGER PROYECTO ADMINISTRACIÓN ORACLE ENTERPRISE MANAGER Proyecto de administración avanzada Alejandro Romero Abadía 1 Este proyecto consiste en una explicación de las funciones que ofrece la consola web de administración

Más detalles

Uso de las herramientas de consulta de Transact-SQL

Uso de las herramientas de consulta de Transact-SQL Uso de las herramientas de consulta de Transact-SQL Contenido Introducción 1 Analizador de consultas SQL 2 Uso de la herramienta Examinador de objetos en el Analizador de consultas SQL 3 Uso de plantillas

Más detalles

BASE DE DATOS DE ADMINISTRACION BASE DE DATOS DE VENTAS

BASE DE DATOS DE ADMINISTRACION BASE DE DATOS DE VENTAS Fundamentos de DB2 DBMS DB2 DB2 es un Manejador de Base de datos Relacionales TABLAS RELACIONADAS BASE DE DATOS DE ADMINISTRACION TABLAS RELACIONADAS BASE DE DATOS DE VENTAS Componentes de DB2 Data Definition

Más detalles

TEMA 10. INTRODUCCCIÓN A SQL. CONSULTAS BASADAS EN UNA TABLA

TEMA 10. INTRODUCCCIÓN A SQL. CONSULTAS BASADAS EN UNA TABLA 1 TEMA 10. INTRODUCCCIÓN A SQL. CONSULTAS BASADAS EN UNA TABLA 1. Definición de SQL. Características 2. Selección del origen de los datos. Cláusula FROM 3. Selección de columnas. Columnas calculadas 4.

Más detalles

Formato para prácticas de laboratorio

Formato para prácticas de laboratorio Formato para prácticas de laboratorio CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA LSC 2009-2 12001 Administración de Bases de Datos PRÁCTICA No. 6 LABORATORIO DE NOMBRE DE LA PRÁCTICA

Más detalles