Cobol - SQL DINAMICO

   
Vista:

SQL DINAMICO

Publicado por Leonardo (1 intervención) el 19/06/2008 20:08:53
Estimados,

Necesito saber si es posible programar SQL dinámicamente utilizando COBOL.

Explico con un ejemplo mejor:

Variable1= "SELECT * FROM tabla "
IF (campoX = condicon)
Variable1 = Variable1 + " ORDER BY algo"
ELSE
Variable1 = Variable1 + "ORDER BY otra cosa"

EJECUTAR SQL DE LA Variable1.

Quizás no sea el mejor ejemplo, pero requiero de algo como esto.

Gracias
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

RE:SQL DINAMICO

Publicado por SuperIndio (138 intervenciones) el 20/06/2008 18:30:07
No es posible en codigo, salvo en agregar esto luego de la precompilacion
si no me entendes te explico, En el Codigo cobol tengo:
EXEC SQL SELECT PANT ,
DESC ,
PREC INTO :D31-PANT ,
:D31-DESC ,
:D31-PREC
FROM TDOC56 WHERE ANUCT = :T102-ANUCT
AND ADISA = :T102-ADISA
AND AORDN = :T102-AORDN
AND ADOCU = :T102-ADOCU
END-EXEC.
Cuando pasa por el precompilador en la wortking se genera
esta definicion :

01 SQ0004 GLOBAL.
02 FILLER PIC X(123) VALUE 'select pant ,desc ,prec i
- 'nto :b1,:b2,:b3 from TDOC56 where (((ANUCT=:b4 and ADISA=:b5
- ') and AORDN=:b6) and ADOCU=:b7)'.

Aunque estoy casi seguro que no funcionara o tendras que modificarlo cada vez que compiles el programa, algo demasiado rebuscado
Para mi la Solucion es:

IF CONDICION THEN
PERFORM SQL-SELECT-ORDEN-A
ELSE
PERFORM SQL-SELECT-ORDEN-B
END-IF.

SQL-SELECT-ORDEN-B
--- EXEC SQL SELECT A, B, C ,D
--- INTO :VA, VB, :VC, :VD FROM TABLITA
--- WHERE Z = 1 ORDER BY A, B, C, D
--- END-EXEC.

SQL-SELECT-ORDEN-B
--- EXEC SQL SELECT A, B, C ,D
--- INTO :VA, VB, :VC, :VD FROM TABLITA
--- WHERE Z = 1 ORDER BY D, C, B, A
--- END-EXEC.

Y Listo

Si los campos a seleccionar son los mismos con esto se soluciona
Ahora si los campos a seleccionar son distintos entonces no es un problema en el SQL
es un problema de tratamiento.
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

RE:SQL DINAMICO - corregido

Publicado por SuperIndio (138 intervenciones) el 20/06/2008 18:37:04
No es posible en codigo, salvo en agregar esto luego de la precompilacion
si no me entendes te explico, En el Codigo cobol tengo:
EXEC SQL SELECT PANT ,
DESC ,
PREC INTO :D31-PANT ,
:D31-DESC ,
:D31-PREC
FROM TDOC56 WHERE ANUCT = :T102-ANUCT
AND ADISA = :T102-ADISA
AND AORDN = :T102-AORDN
AND ADOCU = :T102-ADOCU
END-EXEC.
Cuando pasa por el precompilador en la wortking se genera
esta definicion :

01 SQ0004 GLOBAL.
02 FILLER PIC X(123) VALUE 'select pant ,desc ,prec i
- 'nto :b1,:b2,:b3 from TDOC56 where (((ANUCT=:b4 and ADISA=:b5
- ') and AORDN=:b6) and ADOCU=:b7)'.

Aunque estoy casi seguro que no funcionara o tendras que modificarlo cada vez que compiles el programa, algo demasiado rebuscado
Para mi la Solucion es:

IF CONDICION THEN
PERFORM SQL-SELECT-ORDEN-A
ELSE
PERFORM SQL-SELECT-ORDEN-B
END-IF.

SQL-SELECT-ORDEN-A
--- EXEC SQL SELECT A, B, C ,D
--- INTO :VA, VB, :VC, :VD FROM TABLITA
--- WHERE Z = 1 ORDER BY A, B, C, D
--- END-EXEC.

SQL-SELECT-ORDEN-B
--- EXEC SQL SELECT A, B, C ,D
--- INTO :VA, VB, :VC, :VD FROM TABLITA
--- WHERE Z = 1 ORDER BY D, C, B, A
--- END-EXEC.

Y Listo

Si los campos a seleccionar son los mismos con esto se soluciona
Ahora si los campos a seleccionar son distintos entonces no es un problema en el SQL es un problema de tratamiento.
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