select distinct grantee
from (select p.grantee,
sum(decode(p.granted_role, 'PRESS', 1, 'CONNECT', 1, 0)) over (partition by p.grantee) cnt,
count(*) over (partition by p.grantee) cnt_all
from dba_role_privs p)
where cnt = 2
and cnt_all = 2
Неправильно понимаете. В рамках одной сессии вы видите все незакомиченные изменения сделанные в этой сессии. Если ваша хранимая процедура не автономная, то все она увидит. Да и проверить это легко. Что вам мешает создать таблицу, вставить туда строку, а потом вызвать хранимую процедуру, которая что-то попытается сделать с этой строкой.