Oracle - Asignar valores a variables dinámicamente.

   
Vista:

Asignar valores a variables dinámicamente.

Publicado por Antofar (2 intervenciones) el 26/06/2015 18:21:41
Buenos días a Todos.

Tengo el siguiente problema al querer asignar el valor a una variable con PL/SQL:

DECLARE
TYPE TB_ZONA IS TABLE OF CAT_ZONA%ROWTYPE;
TBL_ZONA TB_ZONA;
V_NOMBRE1 VARCHAR2(100);
V_NOMBRE2 VARCHAR2(100);
V_CAMPO VARCHAR2(20);
BEGIN
SELECT * BULK COLLECT INTO TBL_ZONA FROM CAT_ZONA;

V_CAMPO := 'NOMBRE_ZONA';

FOR I IN 1.. TBL_ZONA.COUNT
LOOP
V_NOMBRE1 := TBL_ZONA(I).NOMBRE_ZONA;
V_NOMBRE2 := 'TBL_ZONA(I).'||V_CAMPO;

DBMS_OUTPUT.PUT_LINE(V_NOMBRE1);
DBMS_OUTPUT.PUT_LINE(V_NOMBRE2);
END LOOP;
END;

Requiero que la variable V_NOMBRE2 tome el mismo valor de V_NOMBRE1, pero está tomando el literal. El valor almacenado en la variable V_CAMPO cambiará dínamicamente por el nombre de otras columnas.

El ejecutar el bloque anónimo el resultado es el siguiente:

V_NOMBRE1: Urbana
V_NOMBRE2: TBL_ZONA(I).NOMBRE_ZONA
V_NOMBRE1: Rural
V_NOMBRE2: TBL_ZONA(I).NOMBRE_ZONA
V_NOMBRE1: Metro
V_NOMBRE2: TBL_ZONA(I).NOMBRE_ZONA
V_NOMBRE1:
V_NOMBRE2: TBL_ZONA(I).NOMBRE_ZONA

Como ven V_NOMBRE2 toma el valor literal de la asignación y no el valor del campo como si lo toma V_NOMBRE1 porque se leindica "quemado" la TABLAPL.CAMPO, pero en mi requerimiento es necesario que el CAMPO tome valores dinamicamente.

Agradezco de antemano sus comentario y/o sugerencias para poder dar solución es esto, pues he buscado mucho, pero tampoco es sencillo el buscar este tema.

De nuevo 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

Asignar valores a variables dinámicamente.

Publicado por Rafael (178 intervenciones) el 29/06/2015 12:53:08
Prueba con esto y nos cuentas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE
    TYPE TB_ZONA IS TABLE OF CAT_ZONA%ROWTYPE;
    TBL_ZONA TB_ZONA;
    V_NOMBRE1 VARCHAR2(100);
    V_NOMBRE2 VARCHAR2(100);
VARIABLE V_CAMPO VARCHAR2(20);
BEGIN
    SELECT * BULK COLLECT INTO TBL_ZONA FROM CAT_ZONA;
    :V_CAMPO := 'NOMBRE_ZONA';
 
    FOR I IN 1.. TBL_ZONA.COUNT
    LOOP
        V_NOMBRE1 := TBL_ZONA(I).NOMBRE_ZONA;
        V_NOMBRE2 := TBL_ZONA(I).:V_CAMPO;
 
        DBMS_OUTPUT.PUT_LINE(V_NOMBRE1);
        DBMS_OUTPUT.PUT_LINE(V_NOMBRE2);
    END LOOP;
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

Asignar valores a variables dinámicamente.

Publicado por Andres Toro F (2 intervenciones) el 06/07/2015 18:20:39
Hola. He probado y me sale el error ORA-01008: no todas las variables han sido enlazadas
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