Oracle

Oracle:無法從儲存過程創建表空間

  • December 18, 2016

我正在嘗試從儲存過程創建表空間。

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

我收到以下錯誤:

測試..

開始測試;結尾;

  • 第 1 行的錯誤:ORA-01031:權限不足 ORA-06512:在“SYSTEM.TESTPRC”,第 10 行 ORA-06512:在第 1 行

當我從 sqlplus 創建表空間時,它已成功創建。我已經以系統使用者身份連接到 sqlplus。

請幫助我解決此問題,您的幫助將很有價值。

在使用定義者權限執行的任何命名的 PL/SQL 塊(儲存過程、函式或觸發器)中,所有角色都被禁用。角色不用於權限檢查,您不能在定義者的權限過程中設置角色。 更多的

首先不要在SYSTEM模式下創建對象。其次,為了在 PL/SQL 中執行命令,您應該擁有直接授予使用者而非角色的權限。並且SYSTEM使用者通過角色繼承CREATE TABLESPACE系統權限DBA,因此您可以直接創建表空間,而不是從 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> 

引用自:https://dba.stackexchange.com/questions/158228