Cobol - Con Script si funciona

 
Vista:

Con Script si funciona

Publicado por Nelson Ochoa A (1 intervención) el 26/04/2019 23:07:59
Haber colegas, quien me aclara este entuerto:

Programo en MFcobol con Base de Datos Oracle-
Realizo programacion Teleproceso ProCobol
En mi programa Cobol pongo la siguiente instrucción y no me da el resultado deseado:

SELECT SCKCRDT_ARR_CALDIR1, SCKCRDT_ARR_CALDIR2,
SCKCRDT_ARR_CALDIR3, SCKCRDT_ARR_CALDIR4,
SCKCRDT_ARR_CALDIR5, SCKCRDT_ARR_CALIND1,
SCKCRDT_ARR_CALIND2, SCKCRDT_ARR_CALIND3,
SCKCRDT_ARR_CALIND4, SCKCRDT_ARR_CALIND5,
SCKCRDT_FEC_CORTE, SCKCRDT_NUMIDE
from bg_admin.T_SCKCRDT
WHERE SCKCRDT_NUMIDE = :D-CEDULA-CTK

Pero el mismo script si funciona directamente en el Sql.

SELECT SCKCRDT_ARR_CALDIR1, SCKCRDT_ARR_CALDIR2,
SCKCRDT_ARR_CALDIR3, SCKCRDT_ARR_CALDIR4,
SCKCRDT_ARR_CALDIR5, SCKCRDT_ARR_CALIND1,
SCKCRDT_ARR_CALIND2, SCKCRDT_ARR_CALIND3,
SCKCRDT_ARR_CALIND4, SCKCRDT_ARR_CALIND5,
SCKCRDT_FEC_CORTE, SCKCRDT_NUMIDE
from bg_admin.T_SCKCRDT
WHERE SUBSTR(SCKCRDT_NUMIDE,4,10) = '1720751732'

la solución ya la hice, y es que tuve que rellenar al campo D-CEDULA-CTK con los zeroes(0) que le faltaban a la izquierda.

Pero mi pregunta en si es que no se puede usar la instruccion???? dentro del programa Cobol:

SUBSTR(SCKCRDT_NUMIDE,4,10)
Gracias por la ayuda que puedan darme.

Nelson
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema con la instrucción SUBSTR en una consulta SQL

Publicado por Alejandro (300 intervenciones) el 12/09/2023 16:53:20
Entiendo tu pregunta. El problema que estás experimentando está relacionado con la diferencia en la forma en que se manejan las consultas SQL directas en Oracle y cómo se ejecutan dentro de un programa COBOL que utiliza Micro Focus COBOL con Oracle.

En SQL directo en Oracle, puedes usar la función `SUBSTR` para extraer una parte de una cadena sin preocuparte por la conversión de tipos. Sin embargo, al utilizar un programa COBOL con Oracle, es importante tener en cuenta cómo se manejan los tipos de datos y las variables.

En tu consulta SQL dentro del programa COBOL, parece que estás tratando de igualar `SCKCRDT_NUMIDE` con una cadena, pero `SCKCRDT_NUMIDE` probablemente es una variable definida en COBOL y no una cadena directa como en tu consulta SQL directa. Esto podría estar causando un comportamiento inesperado.

Si deseas usar la función `SUBSTR` en una consulta SQL dentro de un programa COBOL, debes asegurarte de que estás trabajando con variables o parámetros que se manejan correctamente en COBOL y se corresponden con los tipos de datos de Oracle.

En lugar de:

1
WHERE SCKCRDT_NUMIDE = :D-CEDULA-CTK

Puedes intentar algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
01 D-CEDULA-CTK PIC X(10).
...
EXEC SQL
   SELECT SCKCRDT_ARR_CALDIR1, SCKCRDT_ARR_CALDIR2,
          SCKCRDT_ARR_CALDIR3, SCKCRDT_ARR_CALDIR4,
          SCKCRDT_ARR_CALDIR5, SCKCRDT_ARR_CALIND1,
          SCKCRDT_ARR_CALIND2, SCKCRDT_ARR_CALIND3,
          SCKCRDT_ARR_CALIND4, SCKCRDT_ARR_CALIND5,
          SCKCRDT_FEC_CORTE, SCKCRDT_NUMIDE
   INTO :variables
   FROM bg_admin.T_SCKCRDT
   WHERE SUBSTR(SCKCRDT_NUMIDE, 4, 10) = :D-CEDULA-CTK
END-EXEC.

Asegúrate de declarar correctamente las variables en tu programa COBOL y de que se correspondan con los tipos de datos de Oracle. Esto debería permitirte usar la función `SUBSTR` dentro de tu consulta SQL en COBOL de manera efectiva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar