Anda dapat menggunakan RESTRICT_REFERENCES untuk menunjukkan bahwa suatu fungsi tidak akan membaca/menulis paket atau status basis data.
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;
/
Dulu SQL tidak mengizinkan Anda untuk memanggil suatu fungsi kecuali jika itu membuat janji seperti itu, tetapi pembatasan itu dibatalkan.
Saya lebih suka menjadikannya pembeda antara prosedur dan fungsi. Perlu diingat bahwa jika fungsi PL/SQL memunculkan pengecualian NO_DATA_FOUND, pernyataan SQL panggilan tidak akan gagal (karena tidak ada data yang ditemukan bukanlah kesalahan SQL). Jadi saya lebih suka menggunakan prosedur kecuali objek secara khusus dirancang untuk dipanggil dari SQL.