欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何解決關于Oracle存儲過程執行權限問題

劉姿婷2年前13瀏覽0評論

如何解決關于Oracle存儲過程執行權限問題?

在數據庫系統中存儲過程是必不可少的利器,存儲過程是預先編譯好的為實現一個復雜功能的一段Sql語句集合。它的優點我就不多說了,說一下我碰到的問題吧。我在項目開發的過程中需要用存儲過程來實現一個功能,其中涉及到判斷一張表是否已經建立,沒有建立就由存儲過程來建立這張表。

CREATE OR REPLACE PROCEDURE TestProc

IS

flag number;

BEGIN

select count(*) into flag from all_tables where table_name='TEMP3';

if (flag=0) then

execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';

else

execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';

end if;

END ;

寫這段存儲過程比較簡單,在測試執行的過程中,系統出現如下提示:

ora -01031 :權限不足

從錯誤提示我們定位到錯誤,發現存儲過程在執行 Create table語句時,權限不足。我嘗試著把存儲過程改成匿名存儲過程在PL/SQL中執行,語句既然通過了。這說明這段語句沒有問題,問題出現在執行存儲過程中。我使用的是DBA帳號登錄系統,按理應該不存在權限不足的問題呀。問題出現再哪里呢?通過上網查閱資料,發現Oracle對于執行存儲過程有和Sql-Server不一樣的規定,這個規定造成了執行建表語句權限不足。

Oracle規定,在默認的情況下,在調用存儲過程用戶的角色不起作用,即在執行存儲過程時只有Public權限。所以在調用Create table時,會有權限不足的提示。

存儲過程分為兩種,即DR(Definer's Rights ) Procedure和IR(Invoker's Rights ) Procedure。為什么會有兩種存儲過程呢?其實考慮完下面的問題就清楚了。比如說用戶hrch創建了刪除表tar_table的存儲過程drop_table(),當用戶hrch調用時,即刪除用戶hrch下