Você pode usar RESTRICT_REFERENCES para indicar que uma função não lerá/gravará o estado do pacote ou do banco de dados.
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;
/
Costumava acontecer que o SQL não permitia que você chamasse uma função a menos que fizesse tal promessa, mas essa restrição foi descartada.
Eu preferiria torná-lo um diferenciador entre um procedimento e uma função. Vale lembrar que, se uma função PL/SQL gerar uma exceção NO_DATA_FOUND, uma instrução SQL de chamada não falhará (pois nenhum dado encontrado não é um erro SQL). Portanto, prefiro usar procedimentos, a menos que o objeto seja projetado especificamente para ser chamado do SQL.