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:
Me da al crear la funcion el error: ERROR en línea 29: PL/SQL: SQL Statement ignoredcreate 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;
Muchas gracias de nuevo