Процедуры выполняются без ролей. Один из способов проверить, можно ли выполнить команду в процедуре, - выполнить:
SQL> set role none;
Role set
У вас будет тот же набор прав, что и для ваших процедур:
SQL> SELECT * FROM dba_jobs_running;
SELECT * FROM dba_jobs_running
ORA-00942: table or view does not exist
Вы должны предоставить select на просмотр непосредственно пользователю:
SQL> -- with dba account
SQL> grant select on dba_jobs_running to a;
Grant succeeded
После этого вы сможете скомпилировать процедуру:
SQL> -- with application schema
SQL> CREATE OR REPLACE PROCEDURE test_dba AS
2 BEGIN
3 FOR cc IN (SELECT * FROM dba_jobs_running) LOOP
4 NULL;
5 END LOOP;
6 END test_dba;
7 /
Procedure created