web-dev-qa-db-ja.com

Oracle:ストアドプロシージャからテーブルスペースを作成できません

ストアドプロシージャからテーブルスペースを作成しようとしています。

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に接続しました。

これを修正するために私を助けてください、あなたの助けは価値があります。

2
Sathish Sharma

定義者権限で実行される名前付き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> 
2
JSapkota