Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Bases de datos (https://www.cobolforo.es/forumdisplay.php?f=27)
-   -   Error SQL "02000 - Data not found" (https://www.cobolforo.es/showthread.php?t=138)

Josber 20 de mayo de 2015 13:30

¿PRONOM?, ¿No te referirás a PROCOD?

Código COBOL:
  1. 03  PROCOD                              PIC S9(5).
  2. 03  PRONOM                              PIC X(40).

Código:

'PROCOD' decimal(5,0) unsigned NOT NULL COMMENT 'NUM. PROVEEDOR',
'PRONOM' varchar(40) DEFAULT NULL COMMENT 'NOMBRE PROVEEDOR',

En cuanto al INTO, en otra tabla está puesto así y funciona, pero luego lo cambiaré a ver, y lo del *, pues al ser tantos campos, si tengo que definirlos todos en el SELECT, vaya palo.

Un saludo.-

Kuk 20 de mayo de 2015 16:22

Josber, los campos VARCHAR son campos compuestos, y en COBOL se representan asi:

Código COBOL:
  1.  01  PRONOM.
  2.      49  PRONOM-LON        PIC S9(4) COMP-4. *> CANTIDAD DE BYTES USADA
  3.      49  PRONOM-TXT        PIC X(40). *> MAXIMO

Los niveles 49 deben ser 49 y no otro. Todos los VARCHAR contienen 2 bytes demas, al principio del campo en formato binario donde se indica la longitud, que deberiamos informar segun la longitud que vayamos a usar (de 1 a 40 en este caso). De hecho es la ventaja de los VARCHAR.

En cuanto a lo otro, para los DECIMAL debes usar COMP-3 (o que es lo mismo PACKED-DECIMAL), ademas en la tabla es UNSIGNED :

Código COBOL:
  1. 01  PROCOD                 PIC 9(5) COMP-3.

Pero joe, todo esto son mas bien temas de rendimiento (menos lo del COMP-3). Pero entiendo que en otros sitios te funcion con DECIMAL numerico simple de COBOL? Ha de haber una conversion automatica, puede que en este caso falla por algo. Intenta cambiarlo por COMP-3 a ver que tal...

Si no, ya no se me ocurre nada mas.... :piensa: :(

Josber 20 de mayo de 2015 16:44

No sabía lo del nivel 49 y que los VARCHAR eran campos compuesto, los puedo cambiar por TINYTEXT, aunque lo malo que tiene éste campo es que no pueden contener NULL, ni un valor declarado de inicio. En cuanto al UNSIGNED, si les quito el signo en la WORKING, a la hora de compilar, me dice que han de ser con signo obligatoriamente, si te pusiera la declaración de la WORKING, verías que todos los campos numéricos llevan signo, (CÓDIGO, TARIFA, GRUPO, NÚMERO DE CUENTA, etc.., y es una mier...).

Un saludo.-

Añadido despues de 2 horas 52 minutos
Confirmado Kuk, si pones COMP-3 y le quitas el signo, al compilar da el siguiente error:


FORM-PROVEEDORES-SQL WORKING-STORAGE(7) : JMN2898I-S The host variable of a binary, external decimal, or internal decimal item must contain the symbol S.
FORM-PROVEEDORES-SQL VIENE-DE-FORM-PRO-INI(85) : JMN3175I-S The USAGE of sending item 'PROCOD' in the STRING statement must be DISPLAY.


Un saludo.-

Kuk 20 de mayo de 2015 20:57

Josber, que yo sepa los VARCHAR pueden ser NULL... Pero estas cosas varian a veces, yo como uso DB2, es de lo que más sé. Lo mismo pasa con el signo, DB2 lo permite perfectamente sin signo.

Metele signo y COMP-3. Tambien prueba con COMP-4 en vez de COMP-3 y a ver que tal ;)

Josber 21 de mayo de 2024 19:20

A ver, aunque hace ya unnnnn montón de tiempo de ésto, estaba buscando otra cosa y me he topado con ello.

Al final solucioné el error, nada tan sencillo como mover a ZEROS o SPACES, (lo que corresponda), todas las variables definidas en la WORKING que atañen al fichero que se va a actualizar, ¡¡OJO!!, es muy importante, NO SIRVE hacer un INITIALIZE, no funciona, o por lo menos a mí no me funcionó, fue hacer eso y se acabó el problema.

Un salu2 a [email protected]


La franja horaria es GMT +2. Ahora son las 16:33.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.