PL/SQL संग्रहीत इकाइयों में डिफ़ॉल्ट रूप से भूमिकाएँ सक्रिय नहीं होती हैं (Oracle 19 के साथ परीक्षण किया गया लेकिन यह वही है बहुत लंबे समय से पुराने रिलीज़ में व्यवहार) :
SQL> set serveroutput on
SQL> select banner from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
SQL> show user;
USER is "USR2"
SQL> select * from session_roles;
ROLE
--------------------------------------------------------------------------------
CONNECT
SELECT_CATALOG_ROLE
HS_ADMIN_SELECT_ROLE
STUFF_DOER
SQL> --
SQL> begin
2 for r in (select role from session_roles)
3 loop
4 dbms_output.put_line('role=' || r.role);
5 end loop;
6 end;
7 /
role=CONNECT
role=SELECT_CATALOG_ROLE
role=HS_ADMIN_SELECT_ROLE
role=STUFF_DOER
PL/SQL procedure successfully completed.
SQL> show errors
No errors.
SQL> create or replace procedure sr is
2 begin
3 for r in (select role from session_roles)
4 loop
5 dbms_output.put_line('role=' || r.role);
6 end loop;
7 end;
8 /
Procedure created.
SQL> show errors
No errors.
SQL>
SQL> exec sr;
PL/SQL procedure successfully completed.
SQL>
अनाम PL/SQL (जो डेटाबेस में संग्रहीत नहीं है) और एक संग्रहीत इकाई (डेटाबेस में संग्रहीत प्रक्रिया/कार्य) के बीच अंतर पर ध्यान दें।