Recorrido de cursores dinámicos con DBMS_SQL
Es la primera vez que pido ayuda "by the web" y es porque estoy DESESPERADO!
No encuentro documentación necesaria para recorrer un cursor abierto de forma dinámica mediante el DBMS_SQL. PARSE, pues si bien si soy capaz de abrirlo (y cerrarlo), me es imposible recorrerlo y recoger la información en ningún tipo de variable...
Aunque tengo el cursor en un integer... ¿cómo recojo los datos de este cursor? No tengo forma de declarar una variable de tipo %rowtype ya que el cursor dinámico no me deja :¿-?
Todos los ejemplos del OAI Courseware (documentación oficial) son muy poco explícitos... Para ser más exactos se limitan a abrir un cursor y cerrarlo, y a decir que se recorre igual que un cursor normal.
Mi cogido genera una sentencia completa mediante una función F_SSQL() y es la que inicializa el cursor mediante el PARSE, pero como te comento no tengo forma de recorrer todas las tuplas que me devolvería la consulta completa (unos índices que me generarán múltiples tuplas en diferentes tablas de mi entidad-relación)... Te copy-paste el código
CREATE OR REPLACE PROCEDURE EMISION(
V NUMBER,
A NUMBER,
L NUMBER,
T NUMBER,
Comunidad number,
PERFIL NUMBER,
PERFIL_UNICO CHAR
) IS
TYPE TCursor IS REF CURSOR;
cur TCursor;
SSQL VARCHAR2(600);
d_id_com number;
d_id_pag number;
d_id_pda number;
BEGIN
DBMS_OUTPUT.ENABLE;
SSQL := F_SSQL(V,A,L,T,COMUNIDAD,PERFIL,PERFIL_UNICO);
DBMS_OUTPUT.PUT(SSQL); -- ESTO NO ME LO IMPRIME :-?
DBMS_SQL.OPEN_CURSOR(cur, SSQL,dbms_sql.native);
LOOP
FETCH cur INTO d_id_com, d_id_pag, d_id_pda;
IF cur%FOUND THEN
DBMS_SQL.PUT('' || TO_CHAR(d_id_com) || ', ' || TO_CHAR(d_id_pag) || ', ' || TO_CHAR(d_id_pda));
INSERT INTO T_FACTURAS VALUES (d_id_com, d_id_pag, 1, '01-01-01', 12, 1.12);
END IF;
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
END emision;
/
HELP ME!
THX
No encuentro documentación necesaria para recorrer un cursor abierto de forma dinámica mediante el DBMS_SQL. PARSE, pues si bien si soy capaz de abrirlo (y cerrarlo), me es imposible recorrerlo y recoger la información en ningún tipo de variable...
Aunque tengo el cursor en un integer... ¿cómo recojo los datos de este cursor? No tengo forma de declarar una variable de tipo %rowtype ya que el cursor dinámico no me deja :¿-?
Todos los ejemplos del OAI Courseware (documentación oficial) son muy poco explícitos... Para ser más exactos se limitan a abrir un cursor y cerrarlo, y a decir que se recorre igual que un cursor normal.
Mi cogido genera una sentencia completa mediante una función F_SSQL() y es la que inicializa el cursor mediante el PARSE, pero como te comento no tengo forma de recorrer todas las tuplas que me devolvería la consulta completa (unos índices que me generarán múltiples tuplas en diferentes tablas de mi entidad-relación)... Te copy-paste el código
CREATE OR REPLACE PROCEDURE EMISION(
V NUMBER,
A NUMBER,
L NUMBER,
T NUMBER,
Comunidad number,
PERFIL NUMBER,
PERFIL_UNICO CHAR
) IS
TYPE TCursor IS REF CURSOR;
cur TCursor;
SSQL VARCHAR2(600);
d_id_com number;
d_id_pag number;
d_id_pda number;
BEGIN
DBMS_OUTPUT.ENABLE;
SSQL := F_SSQL(V,A,L,T,COMUNIDAD,PERFIL,PERFIL_UNICO);
DBMS_OUTPUT.PUT(SSQL); -- ESTO NO ME LO IMPRIME :-?
DBMS_SQL.OPEN_CURSOR(cur, SSQL,dbms_sql.native);
LOOP
FETCH cur INTO d_id_com, d_id_pag, d_id_pda;
IF cur%FOUND THEN
DBMS_SQL.PUT('' || TO_CHAR(d_id_com) || ', ' || TO_CHAR(d_id_pag) || ', ' || TO_CHAR(d_id_pda));
INSERT INTO T_FACTURAS VALUES (d_id_com, d_id_pag, 1, '01-01-01', 12, 1.12);
END IF;
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
END emision;
/
HELP ME!
THX
1 Respuesta
Respuesta de oatienza
1