ストアドプロシージャからテーブルスペースを作成しようとしています。
create or replace procedure testprc
is
query_string VARCHAR2(4000);
tbs_name VARCHAR2(20):='test77';
begin
dbms_output.put_line('test..');
query_string := 'CREATE BIGFILE TABLESPACE '|| tbs_name || ' DATAFILE '''|| tbs_name || '.dat'' SIZE 1G REUSE AUTOEXTEND ON ONLINE';
EXECUTE IMMEDIATE query_string;
end;
/
しかし、ストアドプロシージャを実行すると、
execute testprc
次のエラーが発生します。
テスト..
BEGIN testprc;終わり;
- 1行目のエラー:ORA-01031:特権が不十分ですORA-06512: "SYSTEM.TESTPRC"、10行目ORA-06512:1行目
Sqlplusからテーブルスペースを作成すると、正常に作成されます。システムユーザーとしてsqlplusに接続しました。
これを修正するために私を助けてください、あなたの助けは価値があります。
定義者権限で実行される名前付きPL/SQLブロック(ストアドプロシージャ、関数、またはトリガー)では、すべてのロールが無効になります。ロールは特権チェックには使用されず、定義者の権利の手順内でロールを設定することはできません。 その他
まず、SYSTEM
スキーマの下にオブジェクトを作成しないでください。 2つ目は、PL/SQLでコマンドを実行するために、ロールからではなく、ユーザーに直接付与される特権を持っている必要があります。また、SYSTEM
ユーザーはDBA
ロールを介してCREATE TABLESPACE
システム権限を継承するため、PL/SQLプロシージャからではなく直接テーブルスペースを作成できます。
SQL> conn sys as sysdba
SQL> grant create tablespace to system;
Grant succeeded.
SQL> conn system/password
Connected.
SQL> exec testprc
PL/SQL procedure successfully completed.
SQL>