Oracle - Cursor Dinamico con campos variables

 
Vista:

Cursor Dinamico con campos variables

Publicado por Guillermo (14 intervenciones) el 30/04/2007 15:34:26
Estimados amigos, me gustaría saber si la unica forma de abrir un cursor dinamico en Oracle es OPEN, o puedo habrirlo tambien implicitamente, porque tengo un cursor dinamico con campos variables, pero en lugar de abrir con:
open cur_cursor_din FOR 'SELECT'||v_campos||'FROM tabla WHERE codigo1 = '||v_codigo1||'and codigo2 = '||codigo2;

quiero abrirlo con esto:
for cur_cursor_din in C_CAMPO loop

end loop;
solo que para abrir de la segunda manera, no necesito hacer ni el OPEN, ni el FETCH, ni el CLOSE al cursor.

Muchas 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:Cursor Dinamico con campos variables

Publicado por Hector (127 intervenciones) el 30/04/2007 16:22:58
Hola.

Por lo que vi, el unico dinamismo de tu cursor es para cambiar los valores de v_codigo1 y v_codigo2. Hay una manera mas sencilla, usa parametros.

Declare
Cursor C_Datos(v_codigo1 Varchar2, v_codigo2 Number) Is
Select *
From Tabla
Where Codigo1 = v_Codigo1
And Codigo2 = V_codigo2;
Begin
For I In C_Datos('A', 1) Loop
End Loop;
For J In C_datos('B', 1) Loop
End Loop;
End;

Asi puedes invocar cuantas veces necesites tu cursor, cambiando unicamente los parametros que a su vez cambiaran el set de datos que te devolvera dicho cursor.

Esperando que te haya servido.

Atentamente,
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:Cursor Dinamico con campos variables

Publicado por Guillermo (14 intervenciones) el 30/04/2007 17:32:49
Muchas gracias, pero mi cursor realmente debe traer dinamicamente de acuerdo a los parametros, campos distintos, que traigo en mi variable V_CAMPOS. La variable V_CAMPOS, ya cargo previamente en otro cursor, pero mi problema es en el siguiente paso, como le hago el fetch al cursor v_cursor_din, si los campos que traigo no son fijos.
open v_cursor_din FOR 'SELECT '||V_CAMPOS||' FROM TABLA WHERE codigo1 = '||v_codigo1||' and codigo2 = '||v_codigo2;
Y lo que quiero saber es, si puedo abrir el cursor implisitamente, asi como abriste el cursor en el ejemplo que me enviaste(sin open, ni fetch, ni close).
Saludos,
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:Cursor Dinamico con campos variables

Publicado por Hector (127 intervenciones) el 02/05/2007 04:00:52
Hola Guillermo.

Creo que me hizo falta leer esa parte de V_Campos.

En realidad creo que no va a haber otra solucion, deberas hacer un uso explicito del cursor, para poder volver a forzar al parser a calcular el valor de V_Campos.
Creo que no será posible que lo abras implicitamente.
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:Cursor Dinamico con campos variables

Publicado por Guillermo (14 intervenciones) el 02/05/2007 15:51:22
Muchisimas gracias por tu ayuda, ya lo hice explicitamente.
Cordial Saludo,

Guillermo
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:Cursor Dinamico con campos variables

Publicado por VLAD (1 intervención) el 03/02/2012 22:24:22
Un favor me podrias pasar como lo hiciste necesito hacer algo asi ó postealo para que otra persona le pueda servir..


saludos.
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:Cursor Dinamico con campos variables

Publicado por Juan Martin (1 intervención) el 01/10/2014 00:29:04
Espero esto pueda aportar algo a quien necesite..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE
    TYPE EmpCurTyp IS REF CURSOR;
    emp_cv   EmpCurTyp;
    emp_rec  emp%ROWTYPE;
    sql_stmt VARCHAR2(200); /* esta puede ser tu parámetro */
    my_job   VARCHAR2(15) := 'CLERK';
BEGIN
 
    sql_stmt := 'SELECT * FROM emp WHERE job = :j';
 
    OPEN emp_cv FOR sql_stmt USING my_job;
    LOOP
        FETCH emp_cv INTO emp_rec;
        EXIT WHEN emp_cv%NOTFOUND;
        -- procesamiento
 
    END LOOP;
    CLOSE emp_cv;
END;
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:Cursor Dinamico con campos variables

Publicado por Victor Hugo Roumieu (1 intervención) el 19/10/2017 18:10:02
Estimados mucho agradeceré pudieran ayudarme con el siguiente problema. Yo hago un cursor dinámico y quier vectorizar el resultado, luego el problema es que no puedo saber a priori los campos que me retornara, tanto en cantidad como en tipo, longitud, etc.
Si en lugar de PLSQL lo hiciera con java con JDBC puedo consultar el metadata de la consulta.
No se si soy claro, para decirlo de otro modo la consulta dinamica que se ejecuta en el plsql puede en un caso retornar un campo numerico y dos alfanumericos, pero en otra oportunidad pudiera retornar 5 campos numericos y cuatro alfanumericos.
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