NO_DATA_FOUND
означает, что вы не нашли соответствующую строку в таблице. Поэтому обрабатывайте его в секции обработки EXCEPTION
.
Кстати, даже если вы не столкнетесь с этой ошибкой, вы попадете в другую: функция должна вернуть какое-то значение; в любом случае ваш - нет.
CREATE OR REPLACE FUNCTION MY_AUTHENTICATION (p_username IN VARCHAR2,
p_password IN VARCHAR2)
RETURN BOOLEAN
IS
l_user sign_up.user_name%TYPE := UPPER (p_username);
l_id sign_up.user_name%TYPE;
l_hash sign_up.set_password%TYPE;
BEGIN
SELECT user_name, set_password
INTO l_id, l_hash
FROM sign_up
WHERE user_name = l_user
AND set_password = p_password; -- not l_hash!
RETURN TRUE;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN FALSE;
END;