Estoy teniendo problemas, no me critiqueis mucho el código que se que es malísimo, pero bueno, no os imaginais la mierda de libro que tengo y los palos de ciego que estoy dando:
Si se os ocurre otra forma de hacer lo que quiero os lo agradecería porque además es lo que me pide el ejercicio 2 formas de hacerlo para comprobar los costes de ejecución.
Ahí va el código:
Código:
create or replace function devuelve_maximas_cuentas return t_tabla_anidada as v_ret t_tabla_anidada;
CURSOR c_clientes IS
SELECT idPer, ltNomApell
FROM CLIENTI
ORDER BY APELLIDO;
CURSOR c_cuentas (v_idPers IN VARCHAR2) is
SELECT idCTR1 from (select ctacorr.idctr AS idCTR1 FROM CLIENTI, RELCLICTR, CTacorr
WHERE clienti.idpers = relclictr.idpers
AND RELCLICTR.IDCTR = CTacorr.IDCTR
AND clienti.idpers='v_idPers'
ORDER BY imSldAct DESC
)
where rownum < 4;
v_idPers VARCHAR2(30);
v_ltNomApell VARCHAR2(30);
v_idCtr1 VARCHAR2(30);
v_idCtr2 VARCHAR2(30);
v_idCtr3 VARCHAR2(30);
begin
OPEN c_clientes;
FETCH c_clientes into v_idPers, v_ltNomApell;
WHILE c_clientes%FOUND LOOP
OPEN c_cuentas (v_idPers);
FETCH c_cuentas into v_idCtr1, v_idCtr2, v_idCtr3;
WHILE c_cuentas%FOUND LOOP
v_ret := t_tabla_anidada();
v_ret.extend;
v_ret(v_ret.count) := t_resultado(v_idPers, v_ltNomApell, v_idCtr1, v_idCtr2, v_idCtr3);
FETCH c_cuentas into v_idCtr1, v_idCtr2, v_idCtr3;
END LOOP;
CLOSE c_cuentas;
FETCH c_clientes into v_idPers, v_ltNomApell;
END LOOP;
CLOSE c_clientes;
return v_ret;
end devuelve_maximas_cuentas;
Me da al crear la funcion el error: ERROR en línea 29: PL/SQL: SQL Statement ignored
Muchas gracias de nuevo