Логический тип данных доступен только в PL SQL, а не в SQL
Обратите внимание, что если вы прокомментируете большую часть тела функции, вы получите та же ошибка:
CREATE OR REPLACE FUNCTION check_cin_closed_line (
combination IN VARCHAR2 DEFAULT ''
) RETURN BOOLEAN IS
solution BOOLEAN := false;
-- cursor c1 is
-- SELECT (1)
-- FROM RS2QTCIN cin, RS2QTGIN gin
-- WHERE cin.group_id = gin.id
-- AND cin.cin_value = combination
-- and cin.date_end is not null;
-- my_c1 c1%rowtype;
BEGIN
-- open c1;
--
-- FETCH c1 INTO my_c1;
--
-- IF c1%NOTFOUND THEN
-- IF c1%ROWCOUNT != 0 THEN
-- solution := true;
-- END IF;
-- END IF;
--
-- close c1;
RETURN solution;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001, 'An error was encountered - '
|| sqlcode
|| ' -ERROR- '
|| sqlerrm);
END;
Проверка:
SELECT
check_cin_closed_line('1PW2+UB07')
FROM
dual;
SELECT
check_cin_closed_line('')
FROM
dual;
Вы можете использовать тип данных BOOLEAN в PL SQL , но не в качестве возвращаемого типа.
Что можно сделать?
Поскольку вы можете использовать типы данных BOOLEAN в PL SQL, и вы хотите посмотрите результаты этого вызова функции, возможно, используйте анонимный блок PL SQL и используйте оператор CASE, чтобы раскрыть значение возвращаемого значения BOOLEAN:
BEGIN
dbms_output.put_line(
CASE
WHEN check_cin_closed_line('1PW2+UB07') THEN
'true'
ELSE 'false'
END
);
END;