Manual Cobol
Short Description
Manual Cobol...
Description
COBOL
© Aliatis Parque Empresarial Los Llanos Avda.Salteras, parc. 157, buzón 6 41909 Salteras (Sevilla)
AUTOR:
Alejandro Martínez Máñez
AÑO DE EDICIÓN: 2004
Todas las marcas son registradas por sus respectivos r espectivos propietarios.
Indice
INTRODUCCIÓN COBOL .................................................................................. 7
CARACTERÍSTICAS DE LA PROGRAMACIÓN EN COBOL. ......................... 7 ESTRUCTURA DE UN PROGRAMA COBOL............................................... 9
Identification Division..................................................................... 9 Environment Division...................................................................... 9 Data Division. ............................................................................... 10 Procedure Division. ...................................................................... 12 VARIABLES ......................................................................................... 13 Tipos de Datos: ............................................................................. 13 Almacenamiento Interno de Datos Numéricos:............................. 14 SENTENCIAS MÁS COMUNES................................................................ 16 Asignación de valores a variables................................................. 16 Operaciones Aritméticas. .............................................................. 16 Instrucciones de Organización y Control...................................... 16
PROGRAMAS ESTRUCTURADOS ......................................................... ........19
ORGANIZACIÓN DE LA WORKING-STORAGE SECTION.........................20
Uso de COPY’s..............................................................................20 Uso de REDEFINE........................................................................21 Nombres de condición. Nivel 88.................................................... 21 ORGANIZACIÓN DE LA PROCEDURE DIVISION. ....................................21 Tratamiento de Ficheros................................................................23 COMUNICACIÓN ENTRE PROGRAMAS. .................................................23 TABLAS DE MEMORIA..........................................................................24 TRATAMIENTO DE ERRORES................................................................26
SENTENCIAS ESPECIALES COBOL .............................................................27
INITIALIZE.......................................................................................27 INSPECT............................................................................................27 STRING ............................................................................................. 28 UNSTRING........................................................................................28 ACCEPT.............................................................................................29
INCLUSIÓN Y MANEJO DE SENTENCIAS DB2.............................................31
SENTENCIAS SQL................................................................................31
Selección........................................................................................32 Inserción. ....................................................................................... 32 Modificación.................................................................................. 32 Borrado.......................................................................................... 32 SQL EMBEBIDO EN PROGRAMAS COBOL...........................................33 Selección........................................................................................33 Inserción. ....................................................................................... 33 Modificación.................................................................................. 34 Borrado.......................................................................................... 34 Declaración de cursor. .................................................................. 34 Apertura de cursor......................................................................... 35 Fetch del cursor.............................................................................35 Modificación de un registro del cursor. ........................................ 35 Cierre del cursor. ..........................................................................36 Control de errores SQL. ................................................................ 36
INTRODUCCIÓN IBM TSO..............................................................................37
DESPLAZAMIENTO POR LOS MENUS............... ...................... .............. .............. ............. ............. ........... .... 37 EDICIÓN DE FICHEROS................................................................... ............ ............................................................. ...... 39
Comandos generales ................................................................. ..................................................................... .... 41 Comandos de línea:....................................................................... 41 UTILITIES ................................................. ............................................................................................ ........................................... 43
ANEXO A NEXO: CODIGOS DE ERROR.....................................................................................47
FILE STATUS. ............. .................... .............. ............. ............. .............. .............. ............. ............. .............. .............. ............ ..... 48 SQL CODE. ....................................................... ......................................................................................... .................................. 49
Introd ntr oducc ucció ión n COBOL BOL
Cara aract cterí eríst stic icas as de la programació prog ramación n en Cob Cobol ol..
COBOL: Common Business Oriented Language. Es un lenguaje orientado a resolver los problemas normales de negocio: mantenimiento de ficheros secuenciales o indexados, mantenimiento de bases de datos, obtención de informes, etc. La sintaxis de sus instrucciones es similar al lenguaje normal: verbos, instrucciones.
Aliat Al iatis is
7
No soporta cálculos científicos, o trigonométricos, pero sí las funciones de cálculo decimal que se utilizan normalmente en procesos de negocio. También ofrece soluciones para tratamiento de cadenas de caracteres y datos de tipo carácter. Los programas cobol deben estar codificados en 80 columnas (las 80 columnas forman una línea del programa). 1 - 6:
nº de secuencia. (lo introduce el editor).
7:
comentarios (*) o bien línea de continuación (-) en declaración de variables (literales).
8 - 11:
Área A. aquí es donde se escriben los nombres de las divisiones, de las secciones, de los párrafos, los indicadores de FD (File Description) y los niveles de variables 01 y 77 (elementales).
12 - 72:
Área B. En ella se incluirán todas las instrucciones del programa, las líneas de las secciones y los niveles de variables mayores a 01.
73 - 80:
Área de identificación. No se utiliza y por lo tanto es ignorada por el compilador
Área A: deben empezar todas las declaraciones de Divisiones, Secciones, Párrafos.
8
Aliatis
Estructura de un programa Cobol.
Un programa Cobol se divide en 4 zonas o Divisiones. Cada División tiene una función específica dentro de la estructura del programa. A su vez, cada División se puede dividir en Secciones, y dentro de ellas puede haber varios párrafos. Por último dentro de cada párrafo puede haber instrucciones.
Identification Division.
Información General del Programa. Nombre del Programa: PROGRAM-ID. Fecha de creación y compilación, nombre del programador, etc. No se divide en secciones. I DENTI FI CATI ON DI VI SI ON. PROGRAM- I D. MANCLI . AUTHOR. ANDRES MONTES. I NSTALLATI ON. WWW. REMARKS. Pr ogr ama mant eni mi ent o de f i cher o de cl i ent es.
Environment Division.
Información del Hardware y Ficheros de Datos que se van a procesar. Tiene 2 secciones: Configuration Section: contiene los nombres de los ordenadores donde se van a compilar y procesar los programas.
Aliatis
9
Input-Ouput Section: Dispositivos periféricos que se van a utilizar: discos, cintas, impresoras, etc. y además asocia estos dispositivos con los ficheros. Contiene el párrafo File-Control que es obligatorio cuando se van a procesar ficheros en el programa: describe nombre fichero, organización (secuencial, indexado, etc.) y modo de acceso.
ENVI RONMENT DI VI SI ON. CONFI GURATI ON SECTI ON. SOURCE- COMPUTER. RMCOBOL. OBJ ECT- COMPUTER. RMCOBOL. SPECI AL- NAMES. DECI MAL- POI NT I S COMMA. I NPUT- OUTPUT SECTI ON. FI LE- CONTROL. SELECT CLI ENTES ASSI GN TO RANDOM " C: \ DATOS\ CLI ENTES. DAT" ORGANI ZATI ON I NDEXED ACCESS DYNAMI C RECORD KEY KEY- CLI ALTERNATE RECORD KEY- CLI 1 FI LE STATUS STACLI . SELECT I MPRESORA ASSI GN TO PRI NT " PRI NTER" .
Data Division.
Se definen todas las áreas de datos o memoria que va a utilizar el programa. Tiene dos secciones: File Section: se define el formato y las características de los registros de los ficheros. Working-Storage Section: se definen todas las variables que se van a necesitar: Switches, contadores, acumuladores, tablas, etc. Linkage Section: Se describe el área de comunicaciones con otros programas.
10
Aliatis
DATA DI VI SI ON. FI LE SECTI ON. FD CLI ENTES BLOCK CONTAI NS 4 RECORDS RECORD CONTAI NS 128 CHARACTERS LABEL RECORD STANDARD. 01 REG- CLI ENTE. 02 KEY- CLI . 03 CLI COD PI C 9( 4) COMP- 6. 02 CLI NOM PI C X( 30) . 02 CLI DI R PI C X( 30) . 02 CLI POB PI C X( 20) . 02 CLI PRO PI C X( 20) . 02 CLI NI F PI C X( 9) . 02 FI LLER PI C X( 17) . FD I MPRESORA LABEL RECORD OMI TTED. 01 LI NEA PI C X( 132) . WORKI NG- STORAGE SECTI ON. 01 TABLA. 02 FI LLER PI C X( 12) VALUE "LUNMARMI EJ UE" . 02 FI LLER PI C X( 9) VALUE "VI ESABDOM" . 01 TABLAI DA REDEFI NES TABLA. 02 ELEDI A PI C XXX OCCURS 7 TI MES. 01 FECHA PI C 9( 8) . 01 I MPORTE PI C S9( 8) V99. 01 VALORES. 02 UNO PI C 99 VALUE 0. 02 DOS PI C 9( 6) 02 TRES PI C 9( 4) V99. 01 LI NPA. 02 LI MPOR PI C ZZ. ZZZ. ZZZ, ZZ- . LI NKAGE SECTI ON. 01 DATOS- RECI BI DOS. 03 MOVTOS290 03 RETORNO
PI C X( 290) . PI C X.
Aliatis
11
Procedure Division.
Contiene todas las instrucciones del programa, las lecturas de fichero, los cálculos, las escrituras. PROCEDURE DI VI SI ON. PERFORM 10000- I NI CI O- PROGRAMA PERFORM 20000- PROCESO- PROGRAMA PERFORM 30000- FI N- PROGRAMA. 10000- I NI CI O- PROGRAMA. I NI TI ALI ZE WEN- VBLES- ESQ WEA- VBLES- ESQ WSN- VARI ABLES WSA- VARI ABLES ...
12
Aliatis
Variables
Cada variable en Cobol debe tener asociado un Nivel. El Nivel 01 es el principal y define un campo simple, o bien un campo compuesto de otros campos de niveles superiores. Como casos particulares están los niveles 77 (campos elementales que no forman parte de otro campo) y 88 (nombres de condición).
Tipos de Datos:
Datos Alfanuméricos
Se definen con Picture X. 01 WK- TI TULO
PI C X( 19)
VALUE ‘ CURSO DE COBOL 2004’ .
PI C X( 19)
J UST RI GHT.
Justificado a la izq. 01 WK- TI TULO
Justificado a la derecha.
Datos Numéricos
Se definen con Picture 9 (con/sin signo). 01 NUMERO PI C 9( 7) . 01 NUMERO2 PI C S9( 5) V9 VALUE +12, 4.
El signo no ocupa memoria. Se almacena en hexadecimal a razón de byte por dígito de esta forma:
Aliatis
13
F0 F0 F0 F1 F2 C4 La C indica que es positivo, D negativo y F sin signo.
Datos Alfabéticos
definen con Picture A. 01 WK- TI TULO
PI C A( 14)
VALUE ‘ CURSO DE COBOL’ .
Almacenamiento Interno de Datos Numéricos:
USAGE DISPLAY
Es la cláusula por Defecto. Cada dígito ocupa un byte. Ej 9(5), 999V99, S9(3). 01 VAR PI C S9( 3) V99
VALUE +100.
5 bytes en memoria: F1 F0 F0 F0 C0 1 0
0 0 +0
USAGE COMP-3
Decimal empaquetado. Se almacenan 2 caracteres por Byte. 01 VAR PI C S9( 3) V99
COMP- 3 VALUE 123, 45.
3 bytes en memoria: 12 34 5C Para calcular el número de bytes que ocupa se divide el número de dígitos por 2 y se suma 1. Más eficiente en los cálculos.
14
Aliatis
USAGE COMP
Almacenamiento Binario. Se utiliza sobre todo para valores numéricos generados por el sistema, índices internos de tablas. 01 CODI GO
PI C S9( 3)
COMP.
Almacenamiento en memoria: 1-4 dígitos:
2 bytes.
5-9 dígitos:
4 bytes.
10-18 dígitos:
8 bytes.
Los negativos se almacenan como Complemento A2.
Aliatis
15
Sentencias más comunes.
Asignación de valores a variables.
MOVE val or / var i abl e- or i g I NI TI ALI ZE var i abl e.
TO
var i abl e- dest .
Operaciones Aritméticas.
ADD/SUBTRACT/DIVIDE/MULTIPLY
ADD val or / var i abl e TO var i abl e- dest [ GI VI NG var 3] . SUBTRACT val or / var i abl e FROM var i abl e- dest [ GI VI NG var 3] . DI VI DE val or / var i abl e I NTO var i abl e- dest [ GI VI NG var 3] [ REMAI NDER car i abl e- r est o] . MULTI PLY val or / var i abl e BY var i abl e- dest [ GI VI NG var 3] .
COMPUTE
COMPUTE var i abl e- dest = var i abl e- dest
+ val or / var
Instrucciones de Organización y Control
Permiten variar el orden de ejecución secuencial de las intrucciones, pudiéndose transferir el control a cualquier parte del programa.
IF
I F condi ci ón acci ón/ es.
16
Aliatis
I F condi ci ón acci ón/ es ELSE acci ón/ es END- I F
PERFORM
Es la instrucción básica del Cobol. Varía el orden secuencial de instrucciones provocando un salto con retorno. Se invoca a un conjunto de instrucciones, uno o varios párrafos que se ejecutan tantas veces como se considere oportuno. Después de la ejecución de estas sentencias, el programa continua a partir de la instrucción posterior al Perform. NUM- PARRAFO. I nst r ucci ones del pár r af o. NUM- PARRAFO- EXI T. EXI T PERFORM NUM- PARRAFO THRU NUM- PARRAFO- EXI T. PERFORM NUM- PARRAFO THRU NUM- PARRAFO- EXI T r epet i ci ones TI MES. PERFORM NUM- PARRAFO THRU NUM- PARRAFO- EXI T UNTI L Condi ci ón.
Primero evalúa la condición y si se cumple se ejecuta el párrafo hasta que la condición deje de cumplirse (do while). Aliatis
17
PERFORM I nst r ucci ones UNTI L Condi ci ón. PERFORM NUM- PARRAFO THRU NUM- PARRAFO- EXI T WI TH TEST AFTER UNTI L Condi ci ón.
Primero se ejecuta el párrafo y luego valúa la condición. El bucle finaliza cuando deje de cumplirse (do until). PERFORM NUM- PARRAFO THRU NUM- PARRAFO- EXI T VARYI NG i ndi ce FROM campo1 BY i ncr ement o UNTI L Condi ci ón.
EVALUATE
Permite la implementación de alternativas múltiples. Evita la codificación de IF anidados menos legibles. EVALUATE var i abl e1 ALSO var i abl e2 WHEN val or 1 ALSO val or 2 i nst r ucci ones WHEN val or 3 ALSO val or 4 i nst r ucci ones WHEN OTHER i nst r ucci ones END- EVALUATE. EVALUATE TRUE WHEN condi ci ón i nst r ucci ones END- EVALUATE.
18
Aliatis
Programas Estructurados
En la programación en general y en el COBOL en particular, un programa bien hecho no es solo el que funciona, sino que además se le tiene que exigir que sea legible, comprensible, fácilmente modificable, y que sigan unas normas o costumbres que pueden variar dependiendo de la empresa.
Aliatis
19
Organización de la Working-Storage Section.
Los nombres de las variables numéricas incluirán el prefijo WSN-. Los nombres de las variables alfanuméricas incluirán el prefijo WSA-. Los nombres de las constantes (variables que no se modificarán durante el programa) incluirán el prefijo WSK-. Las variables numéricas, alfanuméricas y constantes se definirán por grupos. Se crearan las variables compuestas WSN-VARIABLESNUMERICAS, WSA-VARIABLES-ALFANUMERICAS y WSKCONSTANTES y dentro se definirán todas las variables elementales. También se recomienda el uso de los siguientes elementos:
Uso de COPY’s.
Son porciones de código que se utilizan en varios programas y que se insertan en tiempo de compilación. COPY mi embr o.
Se ahorra tiempo de codificación ya que solo es necesario escribir una vez las sentencias o definiciones. Se facilitan las modificaciones ya que para cambiar un grupo de sentencias o una estructura de fichero solo se tiene que modificar la Copy y recompilar los programas que la use.
20
Aliatis
Uso de REDEFINE.
Una variable “redefine” a otra variable. Se está reservando una única zona de memoria. Según nos interese accedemos con una u otra variable. 01 NOMAPE PI C X( 20) . 01 NOMAPE- RED REDEFI NES NOMAPE. 10 NOMBRE PI C X( 10) . 10 APELLI D PI C X( 10) .
Nombres de condición. Nivel 88.
Facilitan le legibilidad del código. 05 SW- PETI CI ON PI C 9( 5) 88 PETI CI ON- CONSULTAR- 1 88 PETI CI ON- CONSULTAR- 2 88 PETI CI ON- CONSULTAR- 3 88 PETI CI ON- ENCONTRADA 88 PETI CI ON- I NSERTAR 88 PETI CI ON- MODI FI CAR 88 PETI CI ON- BORRAR- FI SI CO
VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE
ZEROS. 00136. 00137. 00139. 00136 00137 00139. 00138. 00140. 00141.
Organización de la Procedure Division.
Los párrafos tendrán como prefijo un número que identifiquen de alguna forma a que parte del programa pertenecen. Un programa estructurado tiene un párrafo 1000-INICIO, un párrafo 3000-PROCESO y otro 5000-FIN.
Aliatis
21
Por convenio, cada instrucción PERFORM tendrá la cláusula THRU. Se llamará al párrafo deseado y a otro párrafo que solo tiene la sentencia EXIT. PERFORM NUM- PARRAFO THRU NUM- PARRAFO- EXI T. NUM- PARRAFO. I nst r ucci ones del pár r af o. NUM- PARRAFO- EXI T. EXI T
El tronco del programa será este: PERFORM 1000- I NI CI O THRU 1000- I NI CI O- EXI T. PERFORM 3000- PROCESO THRU 3000- PROCESO- EXI T UNTI L Condi ci ón. PERFORM 5000- FI N THRU 5000- FI N- EXI T.
En 1000-INICIO se inicializarán las variables, se abrirán los ficheros, los cursores y se hará la primera lectura del fichero (o lo que marque la duración del programa). En 3000-PROCESO se tratará el registro leído después se repetirá la lectura del fichero. En 5000-FIN se cerrará los ficheros, los cursores y se harán todas aquellas tareas no repetitivas que finalicen el proceso. Los párrafos que se llamen desde los anteriores se numerarán 1100-, 1200- si se llaman desde 1000-INICIO, 3100-, 3200- si se llaman desde 3000-PROCESO, etc.
22
Aliatis
Tratamiento de Ficheros.
Operaciones permitidas: OPEN, CLOSE, READ, WRITE, REWRITE, DELETE, START. FI LE STATUS I S Var i abl e ( al f anumér i co de dos car act er es) OPEN I NPUT/ OUTPUT/ I - O/ EXTEND Fi cher o CLOSE Fi cher o
Secuenciales.
READ Fi cher o ( NEXT/ PREVI OUS RECORD) I NTO w- r eg- f i cher o AT END I nst r ucci ón. WRI TE
r eg- f i cher o- FD FROM w- r eg- f i cher o.
(Data Division, File Section, FD) Es importante chequear el estado de la FILE STATUS.
Indexados.
START nombr e de f i cher o KEY ( expr esi ón) nombr e de cl ave ( I NVALI D KEY/ NOT I NVALI D KEY sent enci a) READ nombr e de ar chi vo ( I NTO descr i pci ón) ( KEY nombr e de cl ave) ( I NVALI D KEY/ NOT I NVALI D KEY sent enci a)
Comunicación entre Programas.
El programa llamante invoca a la rutina mediante la instrucción:
Aliatis
23
CALL nombr e- r ut i na USI NG i dent 1, . . . , i dent N.
Las rutinas se codifican de forma diferente a los programas: En la Data Division deben tener la LINKAGE-SECTION: es donde se definen las variables del área de comunicación con el programa invocante. PROCEDURE DI VI SI ON USI NG i dent 1, …, i dent N.
Final de ejecución de la rutina: GOBACK.
Tablas de memoria.
Se definen mediante la utilización de la cláusula OCCURS. Se asigna un nombre común a varios campos contiguos La cláusula OCCURS no se permite a nivel 01. Definición 01 TABLA. 05 FI LAS OCCURS 100 PI C X( 13) . 01 TABLA. 05 FI LAS OCCURS 100. 10 CAMPO1 PI C X( 10) . 10 CAMPO2 PI C 9( 3) . Move Tabl a t o Var i abl e. Move Fi l as( 1) t o Var i abl e. Move campo1( 1) t o Var i abl e.
24
Aliatis
Tablas multidimensionales
01 TABLA- BI DI MENSI ONAL. 05 MES OCCURS 12. 10 SEMANA OCCURS 4 PI C X( 1) . Move ‘ S’ TO SEMANA( 10, 3) .
•
Tablas indexadas
01 TAB- EMPRE. 05 EMPRESAS- REG OCCURS 100 TI MES ASCENDI NG KEY I S CODEMPR I NDEXED BY I NDI CE. 10 CODEMPR PI C S9( 5) V COMP- 3. 10 DI RECCI O PI C X( 10) .
El índice no hay que declararlo en Working. SET I NDI CE TO 1. SET I NDI CE UP BY 1.
Si se busca con la opción ALL la tabla debe estar indexada y ordenada. SET I NDI CE TO 1. SEARCH ALL FI LAS AT END i nst r ucci ones WHEN condi ci ón i nst r ucci ones END- SEARCH.
Aliatis
25
Tratamiento de Errores.
Se codificará un único párrafo de tratamiento de errores. O si se prefiere un párrafo para los errores de tratamientos de ficheros y validaciones en general y otro para los errores de acceso a DB2. También se puede crear una rutina para que la puedan llamar todos los programas del proyecto que estemos desarrollando. Antes de llamar a este párrafo se informará una serie de variables para indicar QUE tipo de fallo se ha producido (si el párrafo no puede averiguarlo por si solo) y DONDE se ha producido. Por ejemplo, se suele tener una variable WSA-PARRAFO donde se introduce el párrafo donde se ha producido el error. De este modo se puede averiguar fácilmente el origen del fallo. SELECT FI CHERO ASSI GN TO FI LE STATUS I S
F- FI CHERO FS- FI CHERO.
02 FS- MASAUTOR PI C XX. 88 OPERACI ÓN- OK VALUE ‘ 00’ . 88 FI N- ARCHI VO VALUE ‘ 10’ . 88 ARCHI VO- NO- ABI ERTO VALUE ‘ 91’ . 3200- LECTURA- FI CHERO. I F ARCHI VO- NO- ABI ERTO MOVE ' 3200- LECTURA- FI CHERO' TO WSA- ULT- PARRAFO PERFORM 5500- TRATAR- ERROR END- I F
... .
26
Aliatis
Sentencias Especiales COBOL
INITIALIZE
Los campos numéricos se inicializan a con ceros y los alfanumericos con blancos. I NI TI ALI ZE campo1 [ , campo2, . . . ] [ REPLACI NG NUMERI C/ ALPHANUMERI C DATA BY campo3
INSPECT
Busca, cuenta, sustituye y convierte caracteres. I NSPECT cadena TALLYI NG cont ador FOR CHARACTERS [ BEFORE/ AFTER I NI I TAL l i t er al / campo] I NSPECT cadena TALLYI NG cont ador FOR ALL/ LEADI NG l i t er al / campo [ BEFORE/ AFTER I NI I TAL l i t er al / campo]
Aliatis
27
I NSPECT cadena REPLACI NG CHARACTERS BY [ BEFORE/ AFTER I NI I TAL l i t er al / campo] I NSPECT cadena REPLACI NG ALL/ LEADI NG/ FI RST l i t er aL BY [ BEFORE/ AFTER I NI I TAL l i t er al / campo] I NSPECT cadena TALLYI NG. . . REPLACI NG . . . I NSPECT cadena CONVERTI NG l i t er al / campo TO l i t er al / campo [ BEFORE/ AFTER I NI I TAL l i t er al / campo]
STRING
STRI NG VARA VARB DELI MI TED BY SI ZE/ CARACTER I NTO VARC STRI NG " HOY ES " DI A " DE " MES " DE " ANI O DELI MI TED BY SI ZE I NTO FRASE.
UNSTRING
Separa cadenas. UNSTRI NG CAMPO- ORI GEN DELI MI TED BY DELI M1 OR DELI M2 I NTO CAMPO- FI NAL- 1 CAMPO- FI NAL- 2 CAMPO- FI NAL- 3
CAMPO- FI NAL- 4 01 TEXTO PI C X( 30) VALUE " MONTES ROBLES, ANDRES". UNSTRI NG TEXTO DELI MI TED BY " " OR " , " I NTO APELLI 1 APELLI 2 NOMBRE.
28
Aliatis
ACCEPT
Facilita la recuperación de datos a través de los propios recursos del sistema. ACCEPT var i abl e FROM ( DATE, DAY, DAY- OF- WEEK, TI ME) .
Aliatis
29
30
Aliatis
Inclusión y Manejo de Sentencias DB2
Sentencias SQL.
Las instrucciones en lenguaje S.Q.L. (Structured Query Language) permiten comunicar peticiones de acceso a datos al DB2. Son usadas por el administrador de la base de datos para crear y cambiar definiciones de datos, por el administrador del sistema en cuanto a autorizaciones a usuarios de los datos, y por el programador de aplicaciones para recuperar y actualizar datos.
Selección.
SELECT campo_1, campo_2, . . , campo_n FROM cr eador . t abl a WHERE campo_cl ave_ 1 = val or _1 AND/ OR campo_cl ave_2 = val or _2
Inserción.
I NSERT I NTO cr eador . t abl a ( campo- 1, campo- 2, . . , campo- n) VALUES val or _1, val or _2, . . , val or _n
Modificación.
UPDATE cr eador . t abl a SET campo_cl ave_1 = val or _1, campo_cl ave_2 = val or _2 WHERE campo_cl ave_ 3 = val or _3 AND/ OR campo_cl ave_4 = val or _4
Borrado.
DELETE FROM cr eador . t abl a WHERE campo_cl ave_ 1 = val or _1 AND/ OR campo_cl ave_2 = val or _2
32
Aliatis
SQL embebido en programas COBOL.
Se introducen las sentencias SQL entre las cláusulas EXEC SQL y END-EXEC. Las variables donde se guardan los resultados van precedidas de ‘:’,
Selección.
EXEC SQL SELECT campo_1, campo_2, . . , campo_n I NTO : campo- 1, : campo- 2, . . , : campo- n FROM cr eador . t abl a WHERE campo_cl ave_1 = campo_cl ave_1 AND/ OR campo_cl ave_2 = campo_cl ave_2 END- EXEC
Si la cláusula WHERE permitiera recuperar los valores de las columnas de dos o mas filas, DB2 devuelve un codigo de error en el SQLCODE (811)y no recupera nada. Si ninguna fila cumple la condición, DB2 devuelve un +100.
Inserción.
EXEC SQL I NSERT I NTO cr eador . t abl a ( campo- 1, campo- 2, . . , campo- n) VALUES : campo_1, : campo_2, . . , : campo_n END- EXEC
Si el registro a insertar tiene una clave que ya existe en la tabla, se devuelve el código de error -803.
Aliatis
33
Modificación.
EXEC SQL UPDATE cr eador . t abl a SET campo_cl ave_1 = campo_cl ave_1, campo_cl ave_2 = campo_cl ave_2 WHERE campo_cl ave_1 = campo_cl ave_1 AND/ OR campo_cl ave_2 = campo_cl ave_2 END- EXEC
Borrado.
EXEC SQL DELETE FROM cr eador . t abl a WHERE campo_cl ave_1 = campo_cl ave_1 AND/ OR campo_cl ave_2 = campo_cl ave_2 END- EXEC
Declaración de cursor.
El cursor permite a un programa recuperar un conjunto de filas, y luego procesar una fila cada vez. El DB2 construye una 'tabla de resultados' para guardar todas las filas recuperadas al ejecutar una instrucción SELECT, y utiliza el cursor para hacerlas disponibles al programa. Un cursor identifica la fila actual de la tabla de resultados, que el programa puede recuperar secuencial mente hasta que alcanza el fin de los datos (SQLCODE).
34
Aliatis
Un programa puede utilizar varios cursores EXEC SQL DECLARE CURSOR nombr e- cur sor FOR SELECT campo_1, campo_2, . . ; campo_n FROM cr eador . t abl a WHERE campo_cl ave_1 = campo_cl ave_1 AND/ OR campo_cl ave_2 = campo_cl ave_2 FOR UPDATE OF campo_3 END- EXEC
Apertura de cursor.
EXEC SQL OPEN CURSOR nombr e- cur sor END- EXEC
Fetch del cursor.
EXEC SQL FETCH CURSOR nombr e- cur sor I NTO : campo- 1, : campo- 2, . . , : campo- n END- EXEC
Modificación de un registro del cursor.
EXEC SQL UPDATE cr eador . t abl a SET col umna_1 = val or 1, col umna_2 = val or 2 WHERE CURRENT OF nombr e_del _cur sor END- EXEC
Aliatis
35
Cierre del cursor.
EXEC SQL CLOSE CURSOR nombr e- cur sor END- EXEC
Control de errores SQL.
03 SW- SQLCODE 88 DB2- OK 88 DB2- NTFND 88 DB2- NULOS 88 DB2- EXI STE ... MOVE SQLCODE
PI C S9( 4) COMP. VALUE VALUE VALUE VALUE
TO SW- SQLCODE
I F NOT DB2- OK I F DB2- NTFND DI SPLAY ' REGI STRO NO ENCONTRADO EN LA TABLA’
36
Aliatis
+0. +100. - 305. - 803.
Introducción IBM TSO
Desplazamiento por los menus.
----------------OPTION ===>
ISPF/PDF PRIMARY OPTION MENU
-----------------
USERID
-
T932006 0 ISPF PARMS - Specify terminal and user parameters TIME - 09:23 1 BROWSE - Display source data or output listings TERMINAL - 3278 2 EDIT - Create or change source data PF KEYS - 12 3 UTILITIES - Perform utility functions 4 FOREGROUND - Invoke language processors in foreground 5 BATCH - Submit job for language processing 6 COMMAND - Enter TSO Command, CLIST, or REXX exec 7 DIALOG TEST - Perform dialog testing 8 LM UTILITIES- Perform library administrator utility functions 9 OTHER - Other IBM and Non-IBM Products (DMS, TMS, INFO, etc.) 10 SCLM - Software Configuration and Library Manager I IOF - Interactive Output Facility C CHANGES - Display summary of changes for this release T TUTORIAL - Display information about ISPF/PDF X EXIT - Terminate ISPF using log and list defaults Enter END command to terminate ISPF.
F1=HELP F2=SPLIT F3=END F4=RETURN F5=RFIND F6=RCHANGE F7=UP F8=DOWN F9=SWAP F10=LEFT F11=RIGHT F12=RETRIEVE
Lo que en entorno Windows se realiza con la tecla RETURN aquí se logra con el CTRL derecho. La pulsación RETURN hace como de tabulador, saltando por la pantalla de una opción a la siguiente. La tecla F2 (SPLIT) abre una nueva sesión en la linea del cursor. La tecla F9 (SWAP) alterna entre una sesión y la anterior. Con el comando KEYS se puede redefinir todas estas teclas. El comando START abre una nueva seción a pantalla completa. El comando SWAP NEXT recorre las sesiones abiertas. El comando SWAP LIST saca la lista de sesiones abiertas para que el usuario elija a la que quiere ir. El comando SCRNAME ‘nombre’ da un título a la sesión actual para luego poder identificarla fácilmente. La tecla F3 sale de la ventana actual hasta cerrar la sesión. Para subir y bajar en una lista de elementos o en el editos se usa F7 (arriba) y F8 (abajo). El comando RETRIEVE permite repetir comandos anteriores sin tener que teclearlos de nuevo.
38
Aliatis
Edición de ficheros.
Opción 2. COMMAND ===> ISPF LIBRARY: PROJECT ===> T932006 GROUP ===> TEST2 ===> ===> ===> TYPE ===> TEXT MEMBER ===> (Blank or pattern for member selection list) OTHER PARTITIONED OR SEQUENTIAL DATA SET: DATA SET NAME ===> VOLUME SERIAL ===> (If not cataloged) DATA SET PASSWORD ===> (If password protected) PROFILE NAME ===> (Blank defaults to data set type) INITIAL MACRO ===> LMF LOCK ===> YES (YES, NO or NEVER) FORMAT NAME ===> MIXED MODE ===> NO (YES or NO) F1=HELP F2=SPLIT F3=END F4=RETURN F5=RFIND F6=RCHANGE F7=UP F8=DOWN F9=SWAP F10=LEFT F11=RIGHT F12=RETRIEVE
Aliatis
39
Se selecciona un miebro de la lista. File Edit Edit_Settings Menu Utilities Compilers Test Help ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss sssssssssssss VIEW DESA2.FUENTE.CICS(MFB30030) - 01.81 Columns 00001 00072 Command ===> Scroll ===> CSR 036500 ESQ **-------------------------------------------------------------** 036600 ESQ * * 036700 ESQ PROCEDURE DIVISION USING DFHEIBLK 036800 ESQ DFHCOMMAREA 036900 ESQ LK-STTRAERR. 037000 ESQ * * 037100 ESQ **---*****-----*****-----*****-----*****-----*****----*****----** 037200 ESQ * NO SE REALIZARAN MODIFICACIONES EN ESTE PARRAFO * 037300 ESQ **---*****-----*****-----*****-----*****-----*****----*****----** 037400 ESQ 037500 ESQ PERFORM 10000-INICIO-PROGRAMA 037600 ESQ 037700 ESQ PERFORM 20000-PROCESO-PROGRAMA 037800 ESQ 037900 ESQ PERFORM 30000-FIN-PROGRAMA. 038000 ESQ 038100 ESQ COPY MTPP0001. 038200 ESQ COPY MTPP0003. 038300 ESQ * 038400 ESQ **-------------------------------------------------------------**
40
Aliatis
Comandos generales
Se introducen en la línea COMMAND FIND Busca cadenas SAVE Salva el fichero LIST Salta a una línea determinada TOP Salta al inicio del fichero BOTTOM Salta al final del fichero UP Salta hacia atrás en el fichero CUT Copia un cierto número de líneas (de un fichero a otro) PASTE Pega las líneas copiadas DOWN Salta hacia atrás en el fichero RESTORE Deshace los comandos introducidos
Comandos de línea:
Se introducen en la línea a tratar. C Copiar A Después B Antes COLS Muestra los números de columnas D Borrar I Insertar M Mueve O Solapar
Aliatis
41
R Repetir TS Dividir línea X Excluir Desplazar () Desplazar Para copiar un número determinado de líneas de un fichero a otro, se edita el miembro destino, se pone A en la línea donde se quiera añadir las líneas y se introduce el comando COPY.
Menu RefList Utilities Help ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss Edit/View - Copy Command ===> More: + "Current" Data Set: E8985.SRCHFOR.LIST From ISPF Library: Project . . . DESA2 Group . . . . FUENTE Type . . . . CICS Member . . . selection list)
. . .
. . .
. . .
(Blank or pattern for member
From Other Partitioned or Sequential Data Set: Data Set Name . . . 'E8985.SRCHFOR.LIST' Volume Serial . . . (If not cataloged) Data Set Password
. .
(If password protected)
Line Numbers (Blank for entire member or sequential data set) First line . . . . Last line . . . . . Number type . . . . (Standard, ISPFstd, COBOL, or Relative)
42
Aliatis
Utilities
Opción 3. Menu Help ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss Utility Selection Panel Option ===> 1 Library Print, 2 Data Set display 3 Move/Copy 4 Dslist names.
Compress or print data set.
Print index listing.
rename, delete, browse, edit or view members Allocate, rename, delete, catalog, uncatalog, or information of an entire data set Move, copy, or promote members or data sets Print or display (to process) list of data set
Print or display VTOC information 5 Reset Reset statistics for members of ISPF library 6 Hardcopy Initiate hardcopy output 7 Transfer Download ISPF Client/Server or Transfer data set 8 Outlist Display, delete, or print held job output 9 Commands Create/change an application command table * Reserved This option reserved for future expansion 11 Format Format definition for formatted data Edit/Browse 12 SuperC Compare data sets (Standard Dialog) 13 SuperCE Compare data sets Extended (Extended Dialog) 14 Search-For Search data sets for strings of data (Standard Dialog) 15 Search-ForE Search data sets for strings of data Extended (Extended Dialog)
Aliatis
43
Lista de ficheros y librerías. Opción 3,4. Menu RefList RefMode Utilities Help ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss Data Set List Utility Option ===> blank Display data set list V Display VTOC information information
P Print data set list PV Print VTOC
Enter one or both of the parameters below: Dsname Level . . . E8985.J* * CL Volume serial . . Data set list options Initial View . . . 1 option
1. Volume
Enter "/" to select
2. Space
/
Confirm Data Set
3. Attrib
/
Confirm Member
Delete Delete 4. Total When the data set list is displayed, enter either: "/" on the data set list command field for the command prompt pop-up, an ISPF line command, the name of a TSO command, CLIST, or REXX exec, or "=" to execute the previous command.
44
Aliatis
Al darle al ENTER obtenemos el listado de ficheros y librerías: Menu Options View Utilities Compilers Help ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss DSLIST - Data Sets Matching E8985.J* Row 1 of 1 Command ===> Scroll ===> CSR Command - Enter "/" to select action Message Volume -----------------------------------------------------------------------------E8985.JCLLIB MSTD01 ***************************** End of Data Set list ****************************
Aquí se puede copiar ficheros, renombrar, mover, etc. Mantenimiento de ficheros y librerias. Opción 3,2. Menu RefList Utilities Help ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssss Data Set Utility Option ===> A Allocate new data set R Rename entire data set D Delete entire data set information blank Data set information
C Catalog data set U Uncatalog data set S Short data set V VSAM Utilities
ISPF Library: Project . . DESA2 Group . . . FUENTE Type . . . . CICS Other Partitioned, Sequential or VSAM Data Set: Data Set Name . . . 'E8985.SRCHFOR.LIST' Volume Serial . . . (If not cataloged, required for option "C") Data Set Password
. .
(If password protected)
Aliatis
45
Al darle al ENTER obtenemos el listado de ficheros y librerías: Data Set Information Command ===> Data Set Name . . . . : E8985.SRCHFOR.LIST General Data Management class . . Storage class . . . Volume serial . . . Device type . . . . Data class . . . . . Organization . . . Record format . . . Record length . . . Block size . . . . 1st extent blocks . Secondary blocks . Data set name type
: : : : : : : : : : : :
MIUSLIST STANDARD MSTD06 3390 **None** PS FBA 133 13566 4 100
Creation date . . . : 2004/05/24 2004/05/25 Expiration date . . : ***None***
46
Aliatis
Current Allocation Allocated blocks . : 4 Allocated extents . : 1
Current Utilization Used blocks . . . . : 1 Used extents . . . : 1
SMS Compressible
. : NO
Referenced date . . :
Anexo Codigos de Error
File Status.
ERROR 00 10 22 23 24 30 34 35 39 41 42 43 47 48 49 90 91 92 93 94
98 99
48
EXPLICACION Operación satisfactoria, todo bien. Cuando se ha llegado al final del fichero y se quiere seguir leyendo. Se intenta copiar un registro con una clave ya existente. Cuando se hace un acceso directo a un registro inexistente. No hay espacio en disco para realizar la operación. Es un error grave de entrada/salida, suele ser ajeno a Cobol y mas concreto en cuanto a configuración del sistema operativo sobre el que se está ejecutando, para solucionarlo deberemos prestar atención a los dos dígitos siguientes al error. Igual que el 24 por falta de espacio en disco. El archivo al que hace referencia no existe. La organización del fichero que se quiere abrir no coincide con su organización real interna. Suele pasar cuando se modifica una FD y el fichero continúa siendo el mismo. Cuando intentamos abrir un archivo que ya está abierto. Si intentamos cerrar un archivo que no esta abierto. Cuando se quiere borrar o reescribir un registro en un fichero abierto con acceso secuencial. Se quiere realizar alguna operación que no corresponde con el modo de acceder al fichero. Si queremos hacer un READ o un START en un archivo que no ha sido abierto como INPUT o como I-O. Igual que el anterior, pero para el caso de querer escribir en un fichero que no esta abierto o no está abierto como I-O, OUTPUT o EXTEND. Cuando queremos borrar o reescribir en un fichero que no ha sido abierto como I-O o el fichero no está abierto. Cuando COBOL recibe un mensaje irreconocible, suele estar ocasionado por incompatibilidad entre los accesos a los ficheros, su forma de apertura y su modo de acceso. Igual que el 42. Cuando intentamos leer, escribir, borrar, reescribir sobre un archivo no abierto. El archivo está en conflicto con otro usuario. Igual que el 39, tiene muchísimas vertientes dependiendo de los dos dígitos siguientes que acompañan al error. Grave error 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. Al borrar, leer o reescribir un registro que está siendo bloqueado por otro usuario.
Aliatis
SQL Code. 000 SUCCESSFUL EXECUTION. Ejecucion correcta.
Warning SQLCODES - Codigos de atencion (Llevan signo) Warning SQLSTATE - Codigos de atencion (Estan entre parentesis) +100 ROW NOT FOUND FOR A FETCH, UPDATE OR DELETE, OR THE RESULT (02000) OF A QUERY IS AN EMPTY TABLE +162 TABLESPACE database-name.tablespace-name HAS BEEN PLACED IN CHECK PENDING +304 A VALUE WITH DATA TYPE data_type1 CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE THE VALUE IS NOT WITHIN THE RANGE OF THE HOST VARIABLE IN POSITION position_number WITH DATA TYPE data_type2 +402 LOCATION location IS UNKNOWN +403 THE LOCAL OBJET REFERENCED BY THE CREATE ALIAS STATEMENT DOES NOT EXIST +558 THE WITH GRANT OPTION IS IGNORED BECAUSE GRANT IS TO PUBLIC +560 THE WITH GRANT OPTION IS IGNORED FOR UPDATE (COLUMN_LIST) +561 THE ALTER AND INDEX PRIVILEGES CANNOT BE GRANTED TO "PUBLIC AT ALL LOCATIONS" +625 THE DEFINITION OF TABLE table-name HAS BEEN CHANGED TO INCOMPLETE +802 EXCEPTION ERROR exception_type OCURRED DURING operation_type OPERATION ON data_type DATA, POSITION position_number Error SQLCODES - Codigos de error (Con signo) Error SQLSTATE - Codigos de error (Entre parentesis) (01501) Al hacer SELECT o INSERT, hay alguna variable truncada, por no coincidir las longitudes -007 STATEMENT CONTAINS THE ILEGAL CHARACTER character -010 THE STRING CONSTANT BEGINNING string IS NOT TERMINATED -060 INVALID type SPECIFICATION: spec
Aliatis
49
-084 UNACCEPTABLE SQL STATEMENT -101 THE STATEMENT IS TOO LONG OR TOO COMPLEX -102 THE LENGTH OF THE STRING CONSTANT BEGINNING string IS GREATER THAN 254 CHARACTERS OR 124 GRAPHIC CHARACTERS -103 literal IS AN INVALID NUMERIC LITERAL -104 STATEMENT CONTAINS THE INVALID CHARACTER OR TOKEN token-1. (37501) TOKEN token-2 WAS EXPECTED. Error sintactico. -105 INVALID STRING -107 THE NAMA name IS TOO LONG. MAXIMUN ALLOWABLE SIZE IS size -109 clause CLAUSE IS NOT PERMITTED -110 INVALID HEXADECIMAL LITERAL BEGINNING string -111 A COLUMN FUNCTION DOES NOT INCLUDE A COLUMN NAME -112 THE OPERAND OF A COLUMN FUNCTION IS ANOTHER COLUMN FUNCTION OR DISTINCT FOLLOWED BY AN EXPRESION -113 INVALID CHARACTER FOUND IN NAME: name -115 A PREDICATE IS INVALID BECAUSE THE COMPARISON OPERATOR operator IS FOLLOWED BY A PARENTHESIZED LIST OR BY ANY OR ALL WITHOUT A SUBQUERY -117 THE NUMBER OF INSERT VALUES IS NOT THE SAME AS THE NUMBER (53002) OF OBJET COLUMNS -118 THE OBJET TABLE OR VIEW OF THE INSERT, DELETE, OR UPDATE STATEMENT IS ALSO IDENTIFIED IN A FROM CLAUSE -119 A COLUMN IDENTIFIED IN A HAVING CLAUSE IS NOT INCLUDE IN THE GROUP BY CLAUSE -120 A WHERE CLAUSE OR SET CLAUSE INCLUDES A COLUMN FUNCTION OR A WHERE CLAUSE INCLUDES A REFERENCE TO COLUMN [column-name] WHICH IS DERIVED FROM A COLUMN FUNCTION IN A VIEW DEFINITION -121 THE COLUMN name IS IDENTIFIED MORE THAN ONCE IN THE INSERT OR UPDATE STATEMENT
50
Aliatis
-122 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 -125 AN INTEGER IN THE ORDER BY CLAUSE DOES NOT IDENTIFY A COLUMN OF THE RESULT -126 THE SELECT STATEMENT CONTAINS BOTH AN UPDATE CLAUSE AND AN ORDER BY CLAUSE -127 DISTINCT IS SPECIFIED MORE THAN ONCE IN A SUBSELECT -128 INVALID USE FOR NULL IN A PREDICATED -129 THE STATEMENT CONTAINS TOO MANY TABLE NAMES -131 STATEMENT WITH LIKE PREDICATE HAS INCOMPATIBLE DATA TYPES -132 A LIKE PREDICATE IS INVALID BECAUSE THE FIRST OPERANDO IS NOT A COLUMN OR THE SECOND OPERAND IS NOT A STRING -133 A COLUMN FUNCTION IN A SUBQUERY OF A HAVING CLAUSE IS INVALID BECAUSE IT INCLUDES AN EXPRESSION THAT APPLIES AN OPERATOR TO A CORRELATED REFERENCE -134 IMPROPER USE OF LONG STRING COLUMN column-name OR A HOST vaRIABLE OF MAXIMUM LENGTH GREATER THAN 254 -136 SORT CANNOT BE EXECUTED BECAUSE THE SORT KEY LENGTH IS GREATER THAN 4000 BYTES -137 RESULT OF CONCATENATION TOO LONG -138 THE SECOND OR THIRD ARGUMENT OF THE SUBSTR FUNCTION IS OUT OF RANGE -150 THE OBJET OF THE INSERT, DELETE, OR UPDATE STATEMENT IS A VIEW FOR WHICH THE REQUEST OPERATION IS NOT PERMITED -151 THE COLUMN column-name CONNOT BE UPDATE BECAUSE IT IS EITHER OR INCLUDED INTHE PARTITIONING KEY OF A PARTITIONES TABLESPACE DERIVED FROM A SQL FUNCTION OR EXPRESSION -153 THE CREATE VIEW STATEMENT DOES NOR INCLUDE A REQUIRED COLUMN LIST -154 THE CREATE VIEW FAILED BECAUSE THE VIEW DEFINITION CONTAINS A UNION, OR UNION ALL, OR A REMOTE OBJETC
Aliatis
51
-156 THE ALTER TABLE, DROP TABLE, LOCK TABLE, OR CREATER INDEX STATEMENT IDENTIFIES A VIEW THE STATEMENT DOES NOT IDENTIFY A TABLE -157 ONLY A TABLE NAME CAN BE SPECIFIED EN A FOREIGN KEY CLAUSE. object-name IS NOT THE NAME OF A TABLE -158 THE NUMBER OF COLUMNS SPECIFIED FOR THE VIEW IS NOT THE SAME AS THE NUMBER OF COLUMNS SPECIFIED BY THE SELECT CLAUSE -159 THE NAME SPECIFIED ON DROP VIEW IS A TABLE NAME -160 THE WITH CHECK OPTION CANNOT BE USED FOR THE SPECIFIED VIEW -161 THE INSERT OR UPDATE IS NOT ALLOWED BECAUSE A RESULTING ROW DOES NOT SATISFY THE VIEW DEFINITION -164 auth-id1 DOES NOT HAVE THE PRIVILEGE TO CREATE A VIEW WITH QUALIFICATION auth-id2 -170 THE NUMBER OF ARGUMENTS SPECIFIED FOR function-name IS INVA LID -171 THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT nn OF function-name IS INVALID -172 function-name IS NOT A VALID FUNCTION NAME -180 THE STRING REPRESENTATION OF A DATETIME VALUE INVALID SYSN(22007) TAX -181 THE STRING REPRESENTATION OF A DATETIME VALUE IS NOT A VALID VALUE -182 AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE IS INVALID -183 AN ARITHMETIC OPERATION ON A DATE OR TIMESTAMP HAS A RESULT THAT IS NOT WITHIN THE VALID RANGE OF DATES -184 AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE CONTAINS A PARAMETER MARKET -185 THE LOCAL FORMAT OPTION HAS BEEN USED WITH A DATE OR TIME AND NO LOCAL EXIT HAS BEEN INSTALLED -186 THE LOCAL DATE LENGTH OR LOCAL TIME LENGTH HAS BEEN ONCREASED AND EXECUTING PROGRAM RELIES ON THE OLD LENGTH -187 A REFERENCE TO A CURRENT DATA/TIME SPECIAL REGISTER IS INVA-
52
Aliatis
LID BECAUSE THE MVS TOD CLOCK IS BAD OR THE MVS PARMTZ IS OUT OF RANGE -198 THE OPERAND OF THE PREPARE OR EXECUTE IMMEDIATE STATEMENT IS BLANCK OR EMPTY -199 ILLEGAL USE OF KEYWORD keyword TOKEN token-list WAS EXPECTED -203 A REFERENCE TO COLUMN column-name IS AMBIGUOUS -204 name IS AN UNDEFINED NAME. Posiblemente la tabla no tenga sinomimo. -205 column-name IS NOT A COLUMN OF TABLE table-name -206 column-name IS NOT A COLUMN OF AN INSERTED TABLE OR AN TABLE IDENTIFIED IN A FROM CLAUSE -207 THE ORDER BY CLAUSE IS INVALID BECAUSE IT INCLUDES A COLUMN NAME BUT IT APPLIES TO THE RESUL OF A UNION OR UNION ALL -208 THE ORDER BY CLAUSE IS INVALID BECAUSE COLUMN name IS NOT PART OF THE RESULT TABLE -219 THE REQUIRED EXPLANATION TABLE table-name DOES NOT EXIST -220 THE COLUMN column-name IN EXPLANATION TABLE table-name IS NOT DEFINED PROPERLY -221 "SET OF OPTIONAL COLUMNS" IS EXPLANATION TABLE table-name IS INCOMPLETE. OPTIONAL COLUMN column-name IS MISSING -250 THE LOCAL LOCATION NAME IS NOT DEFINED WHEN PROCESSING A THREE-PART OBJECT NAME -251 TOKEN name IS NOT VALID -301 THE VALUE OF A HOST VARIABLE CANNOR BE USED AS SPECIFIED BECAUSE OF ITS DATA TYPE -302 THE VALUE OF AN INPUT VARIABLE IS TOO LARGE FOR THE TARGET COLUMN -303 A VALUE CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE THE DATA TYPES ARE NOT COMPARABLE -304 A VALUE WITH DATA TYPE data_type1 CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE THE VALUES IS NOT WITHIN THE RANGE OF
Aliatis
53
THE HOST VARIABLE IN POSITION position_numer WITH DATA TYPE data_type2. -305 THE NULL VALUE CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE NO INDICATOR VARIABLE IS SPECIFIED -309 A PREDICATE IS INVALID BECAUSE A REFERENCED HOST VARIABLE HAS THE NULL VALUE -311 THE INDICATED LENGTH OF A HOST VARIABLE IS NEGATIVE -312 UNDEFINED OR UNUSUABLE HOST VARIABLE variable-name -313 THE NUMBER OF HOST VARIABLES SPECIFIED IS NOT EQUAL TO THE NUMBER OF PARAMETER MARKES -314 THE STATEMENT CONTAINS AN AMBIGUOUS HOST VARIABLE REFERENCE -401 THE OPERANDS OF AN ARITHMETIC OR COMPARISON OPERATION ARE NOT COMPARABLE -402 AN ARITHMETIC FUNCTION OR OPERATOR arith-fop IS APPLIED TO CHARACTER OR DATATIME DATA -404 THE UPDATE OR INSERT STATEMENT SPECIFIES A STRING THAT IS TOO LONG column-name -405 THE NUMERIC LITERAL literal CANNOT BE USED AS SPECIFIED BECAUSE IT IS OUT OF RANGE -406 A CALCULATED OR DERRIVED NUMERIC VALUE IS NOT WITHIN THE RANGE OF ITS OBJECT COLUMN -407 AN UPDATE OR INSERT VALUE IS NULL, BUT THE OBJET COLUMN column-name CANNOT CONTAIN NULL VALUES. La tabla no tiene las columnas que queremos insertar. -408 AN UPDATE OR INSERT VALUE IS NOT COMPARABLE WITH THE DATA TYPE OF ITS OBJECT COLUMN column-name -409 INVALID OPERAND OF A COUNT FUNCTION -410 THE FLOATING POINT LITERAL literal CONTAINS MORE THAN 30 CHARACTERS -411 THE CURRENT DATETIME OR USER KEYWORD CON NOT BE USED AS SPECIFIED -412 THE SELECT CLAUSE OF A SUBQUERY SPECIFIES MULTIPLE COLUMNS
54
Aliatis
-413 OVERFLOW OCCURRED DURING DATA TYPE CONVERRSION -414 THE NUMERIC OR DATATIME COLUMN column-name IS SPECIFIED IN A LIKE PREDICATE -415 THE CORRESPONDING COLUMNS, column-number, THE OPERANDS OF A UNION OR A UNION ALL DO NOT HAVE COMPARABLE COLUMN DESCRIPTIONS -416 AN OPERAND OF A UNION CONTAINS A LONG STRING COLUMN -417 A STATEMENT STRING TO BE PREPARED INCLUDES PARA METER MARKES AS THE OPERANDS OF THE SAME OPERATOR -418 A STATEMENT STRING TO BE PREPARED CONTAINS AN INVALID USE OF PARAMETER MARKES -419 THE DECIMAL DIVIDE OPERATION IS INVALID BECAUSE THE RESULT WOULD HAVE A NEGATIVE SCALE -421 THE OPERANDS OF A UNION ALL DO NOT HAVE THE SAME NUMBER OF COLUMNS -501 THE CURSOR IDENTIFIED IN A FECH OR CLOSE STATEMENT IS NOT (24501) OPEN. El cursor no esta abierto (select) -502 THE CURSOR IDENTIFIED IN AN OPEN STATEMENT IS ALREADY OPEN (24502) El cursor ya esta abierto (select)
-503 A COLUMN CANNOT BE UPDATE BECAUSE IT IS NOT IDENTIFIED IN (56012) THE UPDATE CLAUSE OF THE SELECT STATEMENT OF THE CURSOR No se puede actualizar una columna porque no aparece en la sentencia FOR UPDATE OF del cursor -504 THE CURSOR NAME cursor-name IS NOT DEFINED (52008) El cursor no esta definido -507 THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS (24501) NOT OPEN El cursor no esta abierto (update) -508 THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS (24504) NOT POSITIONED ON A ROW El cursor no esta posicionado en una fila (update) -509 THE TABLE IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS (53027) NOT THE SAME TABLE DESIGNATED BY THE CURSOR
Aliatis
55
La tabla indicada en el update o select no es la misma que la especificada en el cursor. -510 THE TABLE DESIGNATED BY THE CURSOR OF THE UPDATE OR DELETE (53028) STATEMENT CANNOT BE MODIFIED La tabla designada por el update o delete del cursor no se puede modificar -511 THE FOR UPDATE CLAUSE CANNOT BE SPECIFIED BECAUSE THE TABLE (53029) DESIGNATED BY THE CURSOR CANNOT BE MODIFIED No se puede especificar la clausula FOR UPDATE OF porque la tabla no se puede modificar -512 STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID -513 THE ALIAS alias-name MUST NOT BE DEFINED ON ANOTHER LOCAL OR REMOTE ALIAS -514 THE CURSOR cursor-name IS NOT IN A PREPARED STATE -516 THE DESCRIBE STATEMENT DOES NOT IDENTIFY A PREPARED STATEMENT -517 CURSOR cursor-name CANNOT BE USED BECAUSE ITS STATEMENT NAME DOES NOR IDENTIFY A PREPARED SELECT STATEMTENT -518 THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED STATEMENT -519 THE PREPARE STATEMENT IDENTIFIES THE SELECT TEMENT OF THE OPENED CURSOR cursor-name -530 THE INSERT OR UPDATE VALUE OF FOREIGN KEY constraint-name (23503) IS INVALID La clave ajena no existe como clave primaria
-531 THE PRIMARY KEY IN A PARENT ROW CANNOT BE UPDATE BECAUSE IT (23504) HAS ONE OR MORE DEPENDENT ROWS IN A RELATIONSHIP contraint-name No se puede actualizar la clave primaria por tener filas relacionadas en la tabla hijo. -532 THE RELATIONSHIP contraint-name RESTRICTS THE DELETION OF (23504) ROW WITH RID X'rid-number' No se puede borrar la clave primaria por tener filas relacionadas en la tabla hijo. -533 INVALID MULTIPLE-ROW INSERT
56
Aliatis
-534 THE PRIMARY KEY CANNOT BE UPDATED BECAUSE OF MULTIPLE-ROW (21502) UPDATE Se intenta actualizar multiples filas de la clave primaria en un solo update. -535 INVALID UPDATE OR DELETE WITH WHERE CURRENT OF -536 THE DELETE STATEMENT IS INVALID BECAUSE TABLE table-name (56104) CAN BE AFFECTED BY THE OPERATION Hay una tabla descendiente afectada en un proceso de borrado en cascada. -537 THE PRIMARY KEY OR FOREIGN KEY CLAUSE IDENTIFIES COLUMN column-name MORE THEN ONCE -538 FOREIGN KEY name DOES NOT CONFORM TO THE DESCRIPTION OF THE PRIMARY KEY OF TABLE table-name -539 TABLE table-name DOES NOT HAVE A PRIMARY KEY -540 THE DEFINITION OF TABLE table-name IS INCOMPLETE BECAUSE IS DOES NOT HAVE A PRIMARY INDEX -541 FOREIGN KEY name IS INVALID BECAUSE IT IS A DUPLICATE REFERENTIAL CONSTRAINT -542 column-name CANNOT BE A COLUMN OF A PRIMARY KEY BECAUSE IT CAN CONTAIN NULL VALUES -551 auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation ON OBJET objet-name Cuando se intenta hacer un bing de un programa que no es de la entidad (ejem-caser) hay que hacer : SET CURRENT SQLID='BRB0902'; GRANT BING, EXECUTE ON PLAN ________ TO PUBLIC nom.prog. -552 auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation -553 auth-id SPECIFIED IS NOT ONE OF THE VALID AUTHORIZATION IDS -554 AN AUTHORIZATION ID CANNOT GRANT A PRIVILEGE TO ITSELF -555 AN AUTHORIZATION ID CANNOT REVOKE A PRIVILEGE FROM ITSELF -556 A PRIVILEGE CANNOT BE REVOKED BECAUSE IT IS NOT POSSESSED BY auth-id
Aliatis
57
-557 INCONSISTENT GRAND/REVOKE KEYWORD keyword PERMITED KEYWORDS ARE keyword-list -558 INVALID CLAUSE OR COMBINATION OF CLAUSES ON A GRANT OR REVOKE -559 ALL AUTHORIZATION FUNCTIONS HAVE BEEN DISABLED -571 THE STATEMENT WOULD RESULT IN A MULTIPLE SITE UPDATE -601 THE NAME OF THE OBJET BE CREATED IS IDENTICAL TO THE EXISTING NAME name OF THE OBJET TYPE objet-type El nombre de la tabla o de la vista esta mal definido. -602 TOO MANY COLUMNS SPECIFIED IN A CREATE INDEX -603 A UNIQUE INDEX CANNOT BE CREATED BECAUSE THE TABLE CONTAINS ROWS WHICH ARE DUPLICATES WITH RESPECT TO THE VALUES OF THE IDENTIFIED COLUMNS -604 A COLUMN DEFINITION SPECIFIES AN INVALID LENGTH PRECISION, OR SCALE ATTRIBUTE -607 OPERATION operation IS NOT DEFINED FOR SYSTEM TABLES -612 column-name IS A DUPLICATE COLUMN NAME -613 THE PRIMARY KEY IS TOO LONG OR HAS TOO MANY COLUMNS -614 THE INDEX CANNOT BE CREATED BECAUSE THE SUM OF THE INTERNAL LENGTHS OF THE IDENTIFIED COLUMNS IS GREATER THEN THE ALLOWABLE MAXIMUN -616 obj-type1 obj-name1 CANNOT BE DROPPED BECAUSE IS REFERENCED BY obj-type2 obj-name2 -618 OPERATION operation IS NOT ALLOWED ON SYSTEM DATA BASES -619 OPERATION DISALLOWED BECAUSE THE WORKFILE DATA BASE IS NOT STOPPED -620 KEYWORD keyword IN stmt type STATEMENT IS NOT PERMITTED FOR A TABLESPACE IN THE WORKFILE DATA BASE -621 DUPLICATE DBID dbid WAS DETECTED AND PREVIOUSLY ASSIGNED TO database-name -623 A CLUSTERING INDEX ALREADY EXIST ON TABLE table-name -624 TABLE table-name ALREADY HAS A PRIMARY KEY
58
Aliatis
-625 TABLE table-name DOES NOT HAVE AN INDEX TO ENFORCE THE UNIQUENESS OF THE PRIMARY KEY -626 THE ALTER STATEMENT IS NOT EXECUTABLE BECAUSE THE PAGESET IS NOT STOPPED -627 THE ALTER STATEMENT IS INVALID BECAUSE THE PAGESET HAS USER-MANAGED DATA SETS -628 A SEGMENTED TABLESPACE MAY NOT BE PARTITIONED -629 SET NULL CANNOT BE SPECIFIED BECAUSE FOREIGN KEY name CANNOT CONTAIN NULL VALUES -631 FOREIGN KEY name IS TOO LONG OR HAS TOO MANY COLUMNS -632 THE TABLE CANNOT BE DEFINED AS A DEPENDENT OR table-name BECAUSE OF DELETE RULE RESTRICTIONS -633 THE DELETE RULE MUST BE delete-rule -634 THE DELETE RULE MUST NOT BE CASCADE -635 THE DELETE RULES CANNOT BE DIFFERENT OR CANNOT BE SET NULL -636 THE PARTITIONING KEYS ARE NOT SPECIFIED IN ASCENDING OR DESCENDING ORDER -637 DUPLICATE keyword KEYWORD (lectura) -638 TABLE table-name CANNOT BE CREATED BECAUSE COLUMN DEFINITION IS MISSING -639 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 -644 INVALID VALUE SPECIFIED FOR KEYWORD keyword IN stmt-type STATEMENT -646 TABLE table-name CANNOT BE CREATED IN PARTITIONED/DEFAULT TABLESPACE tspace-name BACAUSE IT ALREADY CONTAINS A TABLE -647 BUFFERPOOL bp-name CANNOT BE SPECIFIED BECAUSE IT HAS NOT BEEN ACTIVATED -652 VIOLATION OF INSTALLATION DEFINED EDIT OR VALIDATION PROCEDURE proc-name -653 TABLE table-name IN PARTITIONED TABLESPACE tspace-name IS
Aliatis
59
NOT AVAILABLE BECAUSE ITS PARTITIONED INDEX HAS NOT BEEN CREATED -660 INDEX index-name CANNOT BE CREATED ON PARTITIONED TABLESPACE tspace-name BECAUSE KEY LIMITS ARE NOT SPECIFIED -661 INDEX index-name CANNOT BE CREATED ON PARTITIONED TABLESPACE tspace-name BECAUSE THE NUMBER OF PART SPECIFICATIONS IS NOT EQUAL TO THE NUMBER OF PARTITIONS OF THE TABLASPACE -662 A PARTITIONED INDEX CANNOT BE CREATED ON A NON-PARTITIONED TABLESPACE tspace-name -663 THE NUMBER OF KEY LIMIT VALUES IS EITHER ZERO, OR GREATER THAN THE NUMBER OF COLUMNS IN THE KEY OF INDEX index-name -664 THE INTERNAL LENGTH OF THE LIMIT-KEY FIELDS FOR THE PARTITIONED INDEX index-name EXCEEDS THE LENGTH IMPOSED BY THE INDEX MANAGER -665 THE PART CLAUSE OF AN ALTER STATEMENT IS OMITTED OR INVALID -666 stmt-verb object CANNOT BE EXECUTED BECAUSE A UTILITY IS IN PROGRESS -667 THE CLUSTERING INDEX FOR A PARTITIONED TABLESCE CANNOT BE EXPLICITLY DROPPED -668 THE COLUMN CANNOT BE ADDED TO THE TABLE BECAUSE THE TABLE HAS AN EDIT PROCEDURE -669 A TABLE IN A PARTITIONED TABLESPACE CANNOT BE EXPLICITLY DROPPED -670 THE RECORD LENGTH OF THE TABLE EXCEEDS THE PAGE SIZE LIMIT -671 THE BUFFERPOOL ATTRIBUTE OF THE TABLESPACE CAN NOT BE ALREADY AS SPECIFIED BECAUSE IT WOULD CHANGE THE PAGE SIZE OF THE TABLESPACE -676 A 32K PAGE BUFFERPOOL MAY NOT BE USED FOR AN INDEX -677 INSUFFICIENT VIRTUAL STORAGE FOR BUFFERPOOL EXPANSION -678 THE LITERAL literal SPECIFIED FOR THE INDEX LIMIT KEY MUST CONFORM TO THE DATA TYPE data-type OF THE CORRESPONDING COLUMN column-name -679 THE OBJET name CANNOT BE CREATED BECAUSE A DROP IS PENDING
60
Aliatis
ON THE OBJET -680 TOO MANY COLUMNS SPECIFIED FOR A TABLE -681 COLUMN column-name IN VIOLATION OF INSTALLATION DEFINED FIELD PROCEDURE. RT: return-code, RS: reason-code, MSG:message-token -682 FIELD PROCEDURE procedure-name COULD NOT BE LOADED -683 INVLID COLUMN TYPE FOR FIELDPROC OPTION, column-name -684 THE LENGTH OF LITERAL LIST BEGINING string IS TOO LONG -685 INVALID FIEL TYPE, column-name -686 COLUMN DEFINED WITH A FIELD PROCEDURE CAN NOT COMPARE WITH ANOTHER COLUMN WITH DIFFERENT FIELD PROCEDURE -687 FIELD TYPES INCOMPARABLE -688 INCORRECT DATA RETURNED FROM FIELD PROCEDURE, column-name, msgno -802 EXCEPTION ERROR 'exception_type' HAS OCCURRED DURING 'operation_type' OPERATION ON 'data_type' DATA, POSITION 'position_number' -803 ONE OR MORE INSERT OR UPDATE VALUES ARE INVALID BECAUSE THE (23505) OBJECT COLUMNS ARE CONSTRAINED SUCH THAT NO TWO ROWS OF THE TABLE CAN BE DUPLICATES WITH RESPECT TO THE VALUES OF THOSE COLUMNS. Se esta insertando o actualizando una clave unica con valores duplicados. Clave duplicada. -804 AN ERROR WAS FOUND IN THE APPLICATION PROGRAM INPUT PARAMETERS FOR THE SQL STATEMENT -805 PROGRAM NAME program-name NOT FOUND IN PLAN plan-name (51002) El programa no esta relacionado con el plan. Falta hacer Bind. -811 THE RESULT OF AN EMBEDDED SELECT STATEMENT IS A TABLE OF MO(21000) RE THAN ONE ROW, OR THE RESULT OF THE SUBQUERY OF A BASIC PREDICATE IS MORE THAN ONE VALUE -815 A GROUP BY OR HAVING CLAUSE IS IMPLICITLY OR EXPLICITLY SPECIFIED IN AN ENBEDDED SELECT STATEMENT OR A SUBQUERY PF A BASIC PREDICATE -817 THE INSERT, UPDATE, DELETE, DDI, OR AUTHORIZATION STATEMENT
Aliatis
61
CANNOT BE EXECUTED BECAUSE THE IMS/VS TRANSATION IS INQUIRY ONLY -818 THE PRECOMPILER-GENERATED TIMESTAMP x IN THE LOAD MODULE IS (51003) DIFFERENT FROM THE BIND TIME-STAMP y BUILT FROM THE DBRM El timestamp del plan y del modulo no coinciden. No se ha dado new copy. -819 THE VIEW CANNOT BE RECREATED BECAUSE IT REFERENCES A VIEW THAT COULD NOT BE RECREATED -820 THE SQL STATEMENT CANNOR BE PROCESSED BECAUSE calalog-table CONTAINS A VALUE THAT IS NOT VALID IN THIS RELEASE -821 VIEW 'view-creator'.'view-name' HAS BEEN DROPPED DURING MI GRATION. CREATOR 'synonym-creator' OF SYNONYM 'synonym-name' COULD NOT BE RESOLVED -822 THE SQLDA CONTAINS AN INVALID DATA ADDRESS OR INDICATOR VA RIABLE ADDRESS -840 TOO MANY ITEMS RETURNED IN A SELECT OR INSERT LIST -901 UNSUCCESSFUL EXECUTION CAUSED BY A SYSTEM ERROR THAT DOES NOT PRECLUDE THE SUCCESSFUL EXECUTION OF SUBSEQUENT SQL STATEMENTS -902 UNSUCCESSFUL EXECUTION CAUSED BY A SYSTEM ERROR THAT PRECLUDES THE SUCCESSFUL EXECUTION OF SUBSEQUENT SQL STATEMENTS -904 UNSUCCESSFUL EXECUTION CAUSED BY AN ANAVAILABLE RESOURCE (57011) REASON reason-code, TYPE OF RESOURCE resource-type, AND RESOURCE NAME resource-name Recurso no disponible. Puede estar el tablespace pillado. -905 UNSUCCESSFUL EXECUTION DUE TO RESOURCE LIMIT BEING EXCEEDED, RESOURCE NAME = resource-name LIMIT = limit-amount1 CPU SECONDS (limit-amount2 SERVICE UNITS) DERIVED FROM limit-source -906 THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THIS FUNCTION IS DISABLED DUE TO A PRIOR ERROR -907 UNABLE TO DETERMINE IF THE ATTEMPT TO COMMIT UPDATES MADE AT A REMOTE SITE WAS SUCCESSFUL OR NOT -909 THE OBJECT HAS BEEN DELETED -910 THE SQL STATEMENT CANNOT A ACCESS AN OBJECT ON WHICH A DROP
62
Aliatis
OR ALTERL IS PENDING -911 THE CURRENT UNIT OF WORK HAS BEEN ROLLED BACK DUE TO DEAD (40000) LOCK OR TIMEOUT. REASON reason-code, TYPE OF RESOURCE resorce-type, AND RESOURCE NAME resource-name. Timeout. Recurso no disponible, alguien esta utilizando la misma ta bla en la misma transaccion, hay que esperar un poco y volverlo a intentar. -913 UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON CODE reason-code, TYPE OF RESOURCE resource-type, AND RESOURCE NAME resource-name -922 CONNECTION AUTHORIZATION FAILURE: error-type ERROR Poner USER=SYSDBP. -923 CONNECTION NOT ESTABLISHED: DB2 condition REASON reason-co(57015) de, TYPE resorce-type, NAME resource-name. Posiblemente se ha perdido el bing, volver ha hacerlo, no hace falta com pilarlo, cuidado con los miembros que tenga, hay que hacer el bing a todos. Mirar nombre del plan y DBRM y la compilacion. -924 DB2 CONNECTION INTERNAL ERROR, function-code, return-code, reason-code -925 COMMIT NOT VALID IN IMS/VS OR CICS/OS/VS ENVIRONMENT -926 ROLLBACK NOT VALID IN IMS/VS OR CICS/OS/VS ENVIRONMENT -927 THE LANGUAJE INTERFACE (LI) WAS CALLED WHEN THE CONNECTING (51006) ENVIRONMENT WAS NOT ESTABLISHED. THE PROGRAM SHOULD BE INVOKED UNDER THE DSN COMMAND El programa se debe invocar bajo DSN
Aliatis
63
View more...
Comments