Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Sql Embebido condición where (https://www.cobolforo.es/showthread.php?t=1127)

Hrmcobol 25 de abril de 2020 11:47

Sql Embebido condición where
 
Hola Amigos, espero que sen encuentren todos bien, Don Corona nos tiene a todos enjaulados !!!

EstoY empezando a trabajar con Sql Embebido como dije en otro post.
Resulta que tengo la condición siguiente cargada en una variable cobol que se genera de acuerdo a ciertas condiciones que decide el operador del Soft:

Código SQL:
  1. ART-DESCRI LIKE '%RECEP%' AND ART-CODIGO LIKE '%X-123%'

Si yo muevo el contenido de esta variable a la "Condición" del Control DbAccess del pw encuentra los registros con esa condición.

Código COBOL:
  1. MOVE WG-TXT001 TO SQL-WG-TXT001
  2. EXEC SQL DECLARE WS-LECTURA  CURSOR FOR SELECT * FROM EST_ORIGEN WHERE SQL-WG-TXT001 END-EXEC

No trae ningún registro.
No encontré ejemplos con esta necesidad, alguien sabe que estoy hacineda mal?

Abrazooooo !!!

Y quédense en casa !!!

Kuk 25 de abril de 2020 12:03

Hrmcobol, te has olvidado de que el embebido no es dinámico, debes pasar la condición en claro a la hora de compilar.

Código COBOL:
  1. EXEC SQL
  2.     DECLARE WS-LECTURA CURSOR FOR
  3.     SELECT *
  4.       FROM EST_ORIGEN
  5.      WHERE ART-DESCRI LIKE '%RECEP%' AND ART-CODIGO LIKE '%X-123%'
  6. END-EXEC

Josber 25 de abril de 2020 12:43

1 Archivos Adjunto(s)
Hrmcobol,

Bueno, antes de nada Hrm, nunca utilices nombres_de_variables con el guión medio (-), usa siempre el guión bajo (_), porque si no, el gestor de SQL, cree que estás restando los valores de esas 2 variables, yo al principio me volví loco con eso, hasta que me di cuenta de casualidad, por eso en el ejemplo que te he puesto, uso las mismas variables que tú, pero cambiando el guión.

Para ese tipo de consulta, (que dependen de unas condiciones para montar un tipo u otro de consulta), no puedes hacerlo con un DECLARE sólo, has de usar un PREPARE también, prueba de la siguiente manera a ver si te funciona:

Código COBOL:
  1.  
  2.      INITIALIZE SQL_WG_TXT001.
  3.      STRING "SELECT * FROM EST_ORIGEN WHERE "
  4.             "ART_DESCRI LIKE '%RECEP%' AND ART_CODIGO LIKE '%X-123%'"
  5.             DELIMITED BY SIZE INTO SQL_WG_TXT001
  6.      END-STRING.
  7.  
  8.      EXEC SQL
  9.           DECLARE cursor_1 CURSOR FOR CONSULTA
  10.      END-EXEC.
  11.  
  12.      EXEC SQL
  13.           PREPARE CONSULTA FROM :SQL_WG_TXT001
  14.      END-EXEC.
  15.  
  16.      EXEC SQL
  17.           OPEN cursor_1
  18.      END-EXEC.
  19.  
  20.       .
  21.       .
  22.       .
  23.       .
  24.  
  25.      EXEC SQL
  26.           CLOSE cursor_1
  27.      END-EXEC.

De ésta manera, con el STRING y el PREPARE, puedes montar la consulta que quieras, si no, imagínate lo que sería hacer una consulta de la pantalla que adjunto ...

Si necesitas un ejemplo más grande, dímelo y te pongo alguno de los que tengo hecho en algún programa mío.

Un saludo

Hrmcobol 25 de abril de 2020 21:43

SALIO ANDANDOOOOO !!! ! ! ! ! ! ! ! !


La franja horaria es GMT +2. Ahora son las 22:29.

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