Hola Josber
He leído con interés este post que has publicado
Citación del post de
Josber
|
❞
Cuando declaras un CURSOR, es como hacer un START en un fichero COBOL y la sentencia FETCH es como un READ fichero NEXT RECORD ..., es decir una lectura secuencial, cargas en memoria en una tabla virtual toda la consulta
Código COBOL:
MOVE POW-NUMERIC OF CAMPO1 TO WB1. MOVE POW-NUMERIC OF CAMPO2 TO WB2. EXEC SQL DECLARE cursor_CON CURSOR FOR SELECT * FROM CLIENTES WHERE CLICOD BETWEEN :WB1 AND :WB2 ORDER BY CLINOM ASC END-EXEC. EXEC SQL OPEN cursor_CON END-EXEC. PERFORM CARGAR THRU FIN-CARGAR UNTIL SQLSTATUS = "02000". EXEC SQL CLOSE cursor_CON END-EXEC. EXIT PROGRAM. CARGAR. EXEC SQL FETCH cursor_CON INTO :CLICOD, :CLINOM, . . . END-EXEC.
Cuado usas la sentencia PREPARE, es como una lectura normal de un registro en COBOL, (READ fichero KEY IS ... INVALID KEY ...), si la consulta no varía, te vale con un simple SELECT, pero si varía, tienes que montar la instrucción de busqueda con un STRING, y utilizar un PREPARE, poque no hay otra manera de hacerlo, no puedes hacer un SELCT + el STRING de búsqueda, que es lo que yo necesito.
Código COBOL:
MOVE POW-NUMERIC OF CAMPO1 TO WB1. STRING "SELECT * FROM CLIENTES WHERE CLICOD = " WB1 " LIMIT 1 INTO :CLICOD, :CLINOM , etc ..." DELIMITED BY SIZE INTO SQLCON END-STRING. EXEC SQL PREPARE consulta FROM :SQLCON END-EXEC. EXEC SQL EXECUTE consulta END-EXEC EXEC SQL COMMIT END-EXEC.
Pero me da la sensación que la sentencia PREPARE y EXECUTE, el compilador no las acepta y es una ****da, porque se utilizan bastante en SQL.
Un saludo
|
El cual aporta el trato de un tema muy interesante.
En mi caso he pensado en utilizar el
PREPARE para construir el
CURSOR, sigo investigando, pero me preguntaba si después de varios años, uds. han logrado algo más del información
Saludos