FUNCTION my_func ()
RETURN BOOLEAN
IS
l_contains_x NUMBER;
l_contains_x_bool BOOLEAN := false;
BEGIN
SELECT 1
INTO l_contains_x
FROM dual
WHERE EXISTS (
SELECT 1
FROM table
WHERE col = X
);
IF l_contains_x = 1 THEN
l_contains_x_bool := TRUE;
END IF;
RETURN l_contains_x_bool;
END;
Обратите внимание, что ключом здесь является ключевое слово INTO, которое возвращает значения в переменные. Они сопоставляются по позициям, поэтому вы можете выбрать 4 столбца в 4 переменных (или * в типе строки).
Это предполагает ОДНО значение, поэтому я переместил проверку в существование, поэтому ваш внешний SELECT выбирает только одно значение.
Обратите внимание, что SQL не имеет понятия типа BOOLEAN, поэтому ваша функция может использоваться только в контексте PL / SQL. Если вы хотите, чтобы значение true / false возвращалось в контексте SQL, вам следует использовать VARCHAR2 'true' и 'false'.