Puede usar RESTRICT_REFERENCES para indicar que una función no leerá/escribirá el paquete o el estado de la base de datos.
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;
/
Antes, SQL no le permitía llamar a una función a menos que hiciera esa promesa, pero esa restricción se eliminó.
Preferiría convertirlo en un diferenciador entre un procedimiento y una función. Vale la pena tener en cuenta que si una función PL/SQL genera una excepción NO_DATA_FOUND, una instrucción SQL de llamada no falla (ya que no se encuentran datos no es un error de SQL). Así que prefiero usar procedimientos a menos que el objeto esté específicamente diseñado para ser llamado desde SQL.