Можете да използвате RESTRICT_REFERENCES за да покаже, че дадена функция няма да чете/записва състояние на пакет или база данни.
CREATE PACKAGE t_pkg AS
FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2;
PRAGMA RESTRICT_REFERENCES(showup, WNDS, RNDS);
END t_pkg;
/
-- create the package body
CREATE OR REPLACE PACKAGE BODY t_pkg AS
FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2 IS
v_val varchar2(1);
BEGIN
select dummy into v_val from dual;
RETURN v_val;
END;
END t_pkg;
/
Преди беше така, че SQL не ви позволява да извикате функция, освен ако не направи такова обещание, но това ограничение отпадна.
Бих предпочел да го направя разграничител между процедура и функция. Струва си да се има предвид, че ако PL/SQL функция повдигне изключение NO_DATA_FOUND, извикващият SQL оператор не се проваля (тъй като липсата на намерени данни не е SQL грешка). Така че предпочитам да използвам процедури, освен ако обектът не е специално проектиран да бъде извикан от SQL.