Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/09/2012, 01:20
Avatar de juanmiguel
juanmiguel
 
Fecha de Ingreso: enero-2009
Mensajes: 18
Antigüedad: 15 años, 3 meses
Puntos: 0
Error al crear función

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