Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Fujitsu COBOL (https://www.cobolforo.es/forumdisplay.php?f=77)
-   -   [Sintaxis] COBOL Y SQL (https://www.cobolforo.es/showthread.php?t=1378)

jjcol 28 de septiembre de 2021 06:12

COBOL Y SQL
 
Buenas noches alguien conoce cómo usar el EL WHERE LIKE es que necesito hacer una consulta que me traiga las filas que coincidan en cada columna.
ejemplo hago la consulta así:
Código SQL:
  1. SELECT varbile1, variable2, varible3 FROM TABLE WHERE columna1 LIKE  '%" dato_buscar "%' OR
  2. WHERE columna2 LIKE  '%" dato_buscar "%' OR
  3. WHERE columna3 LIKE  '%" dato_buscar "%'

pero no puedo hacer una cuarta búsqueda no funciona cuando hago la consulta alguien sabe por que puede ser necesito recorrer 10 columnas para buscar datos que coincidan uso power cobol 9.

JCantero 28 de septiembre de 2021 09:22

Te sobran los where.

Debe de ser así

Código SQL:
  1. SELECT varbile1, variable2, varible3 FROM TABLE WHERE
  2.                columna1 LIKE '%" dato_buscar "%' OR
  3.                columna2 LIKE '%" dato_buscar "%' OR
  4.                columna3 LIKE '%" dato_buscar "%'




De cualquier forma te recomiendo que en vez de estar probando en COBOL prueba el SELECT en la base de datos y cuando tengas lo que tu necesitas, te lo llevas al COBOL

Kuk 28 de septiembre de 2021 09:25

@jjcol, un cliente SQL que yo uso desde hace más de 5 años: [Aporte] DBeaver - cliente SQL Freeware (OpenSource) - COBOL Foro

Xavier 28 de septiembre de 2021 12:08

Yo la consulta la haría de esta forma
Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.     01 DatoABuscar    PIC X(....).
Código COBOL:
  1.      EXEC SQL BEGIN DECLARE SECTION END-EXEC.
  2.           01 CampoDeBusqueda   PIC X(...).
  3.           01 ResultadoDato1          PIC X(...).
  4.           01 ResultadoDato2          PIC X(...).
  5.           01 ResultadoDato3          PIC X(...).
  6.       EXEC SQL END DECLARE SECTION END-EXEC.

Código COBOL:
  1. PROCEDURE DIVSION.
  2.     MOVE SPACES TO  DatoABuscar1
  3.  
  4.     MOVE "Lo que quiero buscar"  TO DatoABuscar
  5.     STRING "%" Delimited by size
  6.                    DatoABuscar Delimited by "     "
  7.                   "%" Delimited by size
  8.                         INTO CampoDeBusqueda1

De esta forma, el campo "CampoDeBusqueda" quedaría algo así como "%Lo que quiero buscar%"
y luego, la sentencia SQL, sería

Código SQL:
  1. EXEC SQL
  2.                SELECT dato1, dato2, dato3
  3.                    INTO :ResultadoDato1, :ResultadoDato2, :ResultadoDato3
  4.                    FROM Tabla
  5.                 WHERE Campo1 LIKE CampoDeBusqueda1,
  6.                AND/OR Campo2 LIKE CampoDeBusqueda1
  7.      END-EXEC

jjcol 29 de septiembre de 2021 00:36

Muchas gracias por su respuestas pero es que si me funciona como lo tengo el problema es que no puedo hacer
la búsqueda en mas de 3 columnas cuando uso el 4 cuarto columan4 LIKE
las basqueas por LIKE tienen algún limite ?

---------- Post añadido : 17:36 ---------- Post anterior : 16:58 ----------

Cita:

Citación del post de JCantero (Mensaje 7058)
Te sobran los where.

Debe de ser así

Código SQL:
  1. SELECT varbile1, variable2, varible3 FROM TABLE WHERE
  2.                columna1 LIKE '%" dato_buscar "%' OR
  3.                columna2 LIKE '%" dato_buscar "%' OR
  4.                columna3 LIKE '%" dato_buscar "%'

Si yo lo uso igual es que que tenia un pco de afán y escribí y redacte mal la parte del código pero el problema que tengo es que solo dejar hacer esa tres consultas si le agrego otra consulta no puedo deja de funcionar

Kuk 29 de septiembre de 2021 09:58

@jjcol, enséñanos la consulta que no funciona, a ver

JCantero 29 de septiembre de 2021 18:05

Revisa la longitud del string donde montas la consulta para ver el tamaño que tiene.

Pero como dice @Kuk, pon el trozo de codigo donde haces la consulta para poder ayudarte

jjcol 30 de septiembre de 2021 03:51

adjunto el código pero revisando me di de cuenta que solo me trae el dato si coinciden exactamente igual y no por si tiene alguna coincidencia.
y solo me funciona con las tres primeras búsquedas
Código COBOL:
  1. [SQL]STRING "SELECT "
  2.             "nit, "
  3.               "nombre, "
  4.               "apellido, "
  5.               "telefono, "
  6.               "celular, "
  7.               "direccion, "
  8.               "salario, "
  9.               "bonos, "
  10.               "extras"
  11.             "FROM usuario WHERE "
  12.             "nit LIKE '%" busqueda "%' OR "
  13.             "nombre LIKE '%" busqueda "%' OR "
  14.             "apellido LIKE '%" busqueda "%' "[/SQL]


pero de esta forma no funciona que son con mas de tres búsquedas

Código COBOL:
  1. [SQL]STRING "SELECT "
  2.             "nit, "
  3.               "nombre, "
  4.               "apellido, "
  5.               "telefono, "
  6.               "celular, "
  7.               "direccion, "
  8.               "salario, "
  9.               "bonos, "
  10.               "extras"
  11.             "FROM usuario WHERE "
  12.             "nit LIKE '%" busqueda "%' OR "
  13.             "nombre LIKE '%" busqueda "%' OR "
  14.             "apellido LIKE '%" busqueda "%' OR"
  15.             "telefono LIKE '%" busqueda "%' OR "
  16.             "celular LIKE '%" busqueda "%' OR "
  17.             "direccion LIKE '%" busqueda "%'"[/SQL]

JCantero 30 de septiembre de 2021 08:53

Cita:

Citación del post de jjcol (Mensaje 7072)
me di de cuenta que solo me trae el dato si coinciden exactamente igual y no por si tiene alguna coincidencia.
y solo me funciona con las tres primeras búsquedas

Revisa esto:

Pones:

Código COBOL:
  1.  WHERE "
  2.            "nit LIKE '%" busqueda "%' OR

Si busqueda es un string de 20 y contiene "pepe " esta buscando

Código COBOL:
  1.  WHERE "
  2.            "nit LIKE '%pepe       %' OR


Cuando tu quieres buscar:

Código COBOL:
  1.  WHERE "
  2.            "nit LIKE '%pepe%' OR

Entonces debes de poner, en este caso;

Código COBOL:
  1.  WHERE "
  2.            "nit LIKE    '%"      busqueda(1:4)     "%' OR

O sea que tienes que delimitar el string busqueda, ya que creo, te esta buscando los espacios

Código COBOL:
  1.  
  2. perform varying i from 2 by 1 until i = 21 or busqueda(i:) = ' '
  3.    continue
  4. end-perform
  5.  


Código COBOL:
  1.  
  2.  WHERE "
  3.            "nit LIKE '%"    busqueda(1:i-1)     "%' OR


La franja horaria es GMT +2. Ahora son las 17:03.

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