Oracle
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
我收到以下錯誤:
測試..
開始測試;結尾;
- 第 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>