プロシージャはロールなしで実行されます。プロシージャでコマンドを実行できるかどうかを確認する 1 つの方法は、次を実行することです。
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
ビューの選択をユーザーに直接許可する必要があります。
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