No he conseguido hacer funcionar ese codigo que pones, pero si lo que quieres es una funcion que de un string te saque todos los email que hay que están separados por punto y coma, yo tengo una funcioncilla que lo hace, solo tienes que adaptarla a tus necesidades.
Es muy arcaica, pero funciona de maravilla-
DECLARE
V_IN_STR NUMBER;
V_CADENA1 VARCHAR2(4000);
V_CADENA2 VARCHAR2(4000);
BEGIN
v_cadena1 := '
[email protected];
[email protected];
[email protected] s;
[email protected];
[email protected]' ;
LOOP
V_IN_STR := INSTR(V_CADENA1,';');
IF v_IN_STR = 0 THEN
dbms_output.put_line(v_cadena1);
EXIT;
END IF;
V_CADENA2 := LTRIM(RTRIM(SUBSTR(v_CADENA1,1,V_IN_STR-1)));
dbms_output.put_line(v_cadena2);
v_CADENA1 := LTRIM(RTRIM(SUBSTR(v_CADENA1,V_IN_STR+1)));
END LOOP;
END;