При этом используется локально определенная функция, поэтому она недоступна в SQL, но на нее можно ссылаться в PL / SQL.
DECLARE
lnum_id NUMBER := return_id;
lnum_check VARCHAR2(100);
FUNCTION return_id
RETURN NUMBER
IS
BEGIN
RETURN 123456;
END;
BEGIN
lnum_id := return_id;
SELECT COUNT(*)
INTO lnum_check
FROM my_table
WHERE table_id = lnum_id;
DBMS_OUTPUT.put_line(lnum_check);
END;
Вы, вероятно, захотите эту функцию в пакете, и в этом случае выможет объявить функцию в заголовке пакета, написать код функции в теле, а затем сослаться на нее в самом SQL.Поэтому, если я объявляю функцию (FNC_RETURN_ID) в пакете с именем PKG_DATA_CHECKS, которая возвращает NUMBER, я могу сделать следующее:
DECLARE
lnum_id NUMBER;
lnum_check VARCHAR2(100);
BEGIN
SELECT COUNT(*)
INTO lnum_check
FROM my_table
WHERE table_id = (SELECT pkg_data_checks.fnc_return_id FROM dual);
DBMS_OUTPUT.put_line(lnum_check);
END;