estou com uma dificuldade em criar uma função que retornaria login válidos.
Os logins válidos são aqueles que possuem um nivel que possua vinculo com nivel 3.
Exemplo: existe o nivel 1 que possui vinculo com nivel 2...o nivel 2 possui vinculo com o nivel 3...o nivel 3 possui vinculo com o nivel 4 e o nivel 4 com o nivel 5. Mas as vezes alguns logins estão no nivel 1 que possuem vinculo com o nivel 4. Gostaria de separar aqueles que possuem somente vinculo com o nivel 3.
Quando realizo a pesquisa:
SELECT f_encontra_login_valido(login)
FROM vw_banco_ideias_usuarios
Ocorre o seguinte erro: ORA-06503: PL/SQL: Função retornada sem valor
Segue a função que estou utilizando:
CREATE OR REPLACE FUNCTION f_encontra_login_valido
(login_usuario IN VARCHAR2)
RETURN VARCHAR2
IS
Nivel_Usuario NUMBER;
Id_Unidade NUMBER;
CURSOR C1 IS
SELECT cod_nivel
FROM vw_apex_unid_organizac_tcu
WHERE cod = (SELECT cod_lotado FROM vw_banco_ideias_usuarios WHERE UPPER(login) = UPPER(login_usuario));
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO Nivel_Usuario;
EXIT WHEN C1%NOTFOUND;
IF (Nivel_Usuario = 1) THEN
SELECT cod_unidade_superior
INTO Id_Unidade
FROM vw_apex_unid_organizac_tcu
WHERE cod = (SELECT cod_lotado FROM vw_banco_ideias_usuarios WHERE UPPER(login) = UPPER(login_usuario));
SELECT cod_nivel
INTO nivel_usuario
FROM vw_apex_unid_organizac_tcu
WHERE cod = Id_Unidade;
IF (Nivel_Usuario = 2) THEN
SELECT cod_unidade_superior
INTO Id_Unidade
FROM vw_apex_unid_organizac_tcu
WHERE cod = Id_Unidade;
SELECT cod_nivel
INTO nivel_usuario
FROM vw_apex_unid_organizac_tcu
WHERE cod = Id_Unidade;
IF (Nivel_Usuario = 3) THEN
RETURN login_usuario;
END IF;
END IF;
ELSIF (Nivel_Usuario = 2) THEN
SELECT cod_unidade_superior
INTO Id_Unidade
FROM vw_apex_unid_organizac_tcu
WHERE cod = (SELECT cod_lotado FROM vw_banco_ideias_usuarios WHERE UPPER(login) = UPPER(login_usuario));
SELECT cod_nivel
INTO nivel_usuario
FROM vw_apex_unid_organizac_tcu
WHERE cod = Id_Unidade;
IF (Nivel_Usuario = 3) THEN
RETURN login_usuario;
END IF;
ELSIF (Nivel_Usuario = 3) THEN
RETURN login_usuario;
END IF;
END LOOP;
CLOSE C1;
END;