dbms_output.put_line
nie jest przeciążony, aby zaakceptować argument logiczny. Możesz zrobić coś takiego
dbms_output.put_line( case when exist = true
then 'true'
else 'false'
end );
aby przekonwertować wartość logiczną na ciąg, który można następnie przekazać do dbms_output
.
Błąd ORA-01422 to zupełnie osobna sprawa. Funkcja checkEmpNo
zawiera SELECT INTO
oświadczenie
SELECT emp_id
INTO emp_number
FROM emp;
SELECT INTO
wygeneruje błąd, jeśli zapytanie zwróci cokolwiek innego niż 1 wiersz. W tym przypadku, jeśli w emp
znajduje się wiele wierszy tabeli, pojawi się błąd. Domyślam się, że chcesz, aby twoja funkcja robiła coś takiego
CREATE OR REPLACE FUNCTION checkEmpNo(p_eno number)
RETURN boolean
IS
l_count number;
BEGIN
SELECT count(*)
INTO l_count
FROM emp
WHERE emp_id = p_eno;
IF( l_count = 0 )
THEN
RETURN false;
ELSE
RETURN true;
END IF;
END checkEmpNo;