U kunt RESTRICT_REFERENCES gebruiken om aan te geven dat een functie de pakket- of databasestatus niet kan lezen/schrijven.
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;
/
Vroeger stond SQL je niet toe om een functie aan te roepen, tenzij het zo'n belofte deed, maar die beperking werd geschrapt.
Ik zou er de voorkeur aan geven om het een onderscheid te maken tussen een procedure en een functie. Het is de moeite waard om in gedachten te houden dat als een PL/SQL-functie een NO_DATA_FOUND-uitzondering genereert, een aanroepende SQL-instructie niet mislukt (aangezien geen gegevens gevonden geen SQL-fout is). Ik gebruik dus liever procedures, tenzij het object specifiek is ontworpen om vanuit SQL te worden aangeroepen.