儲存過程中呼叫EXECUTE IMMEDIATE的“許可權不足”
EXECUTE IMMEDIATE是Oracle中使用動態SQL的一種方法,可以直接執行,也可以在儲存過程中呼叫。然而在儲存過程中呼叫可能會遇到許可權不足的問題,如在儲存過程中執行重建索引語句:
sqlt := 'alter index ' || idx.index_name || ' rebuild online ';
EXECUTE IMMEDIATE sqlt;
會報許可權不足:如下
ORA-01031: 許可權不足
ORA-06512: 在"bdc.proc_rebuild_part_index", line 5
ORA-06512: 在line 1
既然提示說許可權不足,所以問題的解決方法就是要賦予使用者scott Create Any Table的許可權,以SYS登入,然後執行:
GRANT CREATE ANY TABLE TO SCOTT
再重新執行下剛才的儲存過程,成功。
相關推薦
儲存過程中呼叫EXECUTE IMMEDIATE的“許可權不足”
EXECUTE IMMEDIATE是Oracle中使用動態SQL的一種方法,可以直接執行,也可以在儲存過程中呼叫。然而在儲存過程中呼叫可能會遇到許可權不足的問題,如在儲存過程中執行重建索引語句: sqlt := 'alter index ' || idx.index_name || ' rebuild on
oracle儲存過程中使用execute immediate執行sql報ora-01031許可權不足的問題
--問題描述: 使用者在儲存過程中呼叫execute immediate 執行 create table語句報錯 ORA-01031, 並且反映直接執行該語句無報錯。--原因根據問題可以發現使用者確實有create table的許可權,查詢dba_role_privs 和 d
儲存過程中呼叫自定義函式(不在同一使用者下)提示無許可權或識別符號無效
問題描述: 在A使用者下自定了一個函式 : getName(); 然後在B使用者下建立儲存過程,呼叫了A使用者下的自定義函式getName;在編譯儲存過程時提示函式 getName無效。 解決方法: 將A使用者下自定義函式getNa
oracle儲存過程中提示“許可權不足”的解決辦法
我們知道,使用者擁有的role許可權在儲存過程是不可用的。如: SQL> select * from dba_role_privs where grantee='SUK'; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE ------------ -----
MySql儲存過程中傳參和不傳參以及java中呼叫程式碼
資料庫表結構 1.mysql不傳參寫儲存過程 create procedure product() -- product為儲存過程名稱 begin select * from book; end 呼叫此儲存過程為 CALL product
在PL/SQL Developer和oracle中如何新建儲存過程並呼叫儲存過程
1、新建程式視窗,選擇Procedure 2、寫入procedure以後,要執行程式進行編譯 3、編譯成功以後,有三種方法可以執行procedure 第一種是在命令視窗執行exec procedure name SQL> exec procedure_name();
Oracle中建立儲存過程和呼叫過程(一)
1、定義 所謂儲存過程(Stored Procedure),就是一組用於完成特定資料庫功能的SQL語句集,該SQL語句集經過 編譯後儲存在資料庫系統中。在使用時候,使用者通過指定已經定義的儲存過程名字並給出相應的儲存過程引數 來呼叫並執行
C#呼叫SQL中的儲存過程中有output引數
string strsql = string.Format("Sp_AutoTenderTrialAll"); SqlParameter[] sqlParam = new SqlParameter[]{ new SqlParameter("@
如何在MySQL的儲存過程中書寫批量的使用者許可權/授權語句
網上單獨關於MySQL使用者許可權或者儲存過程的文章有不少,但是關於在儲存過程中如何書寫使用者授權語句,尤其是批量授權的資料卻很少。 為什麼筆者會遇到在儲存過程中書寫批量使用者授權語句的需求,是因為筆者在日常開發中承擔了一部分簡單的運維職責(筆者還是很贊同開發兼運維的思想)
儲存過程中建立臨時表,為何沒有許可權?
oracle在儲存過程中建立臨時表,執行execute immediate str;報許可權不夠,但是複製出這個sql,直接在sql視窗執行成功,原因如下: 在儲存過程中的所有操作都必須直接顯式授權,不能通過角色授權。你必須把 CREATE TABLE 許可權顯式授予建立
sql(join中on與where區別) / NVL函式 / oracle儲存過程中is和as區別 / JAVA呼叫資料庫儲存過程
left join :左連線,返回左表中所有的記錄以及右表中連線欄位相等的記錄。 right join :右連線,返回右表中所有的記錄以及左表中連線欄位相等的記錄。 inner join: 內連線,又叫等值連線,只返回兩個表中連線欄位相等的行。 full join:外連線,返回兩個表中的行:left jo
JAVA中對儲存過程的呼叫方法
一:Java如何實現對儲存過程的呼叫: A:不帶輸出引數的 ---------------不帶輸出引數的---------------------------------- create procedure getsum @n int =0<--此處為引
mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享
摘要: 下文將分享"一個儲存過程"中如何呼叫"另一個儲存過程的返回結果",並應用到自身的運算中在實際開發中,我們經常會遇到在一個儲存過程中呼叫另一個儲存過程的返回結果(儲存過程相互應用) 實現思路:主要採用臨時表將儲存過程返回的結果集進行儲存,然後供另一個儲存過程應用。
SQL儲存過程中分頁
</pre><pre name="code" class="sql">ALTER proc [dbo].[GetGoodsLsit] ----分頁條件 @StartIndex varchar(20), @PageSize varchar(20), ----排序條件
如何在儲存過程中執行set命令 我來答
1.EXEC使用EXEC命令兩種用種執行儲存程另種執行態批處理所講都第二種用 面先使用EXEC演示例,程式碼1DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;SET @TableName = 'Orders';SET @Orde
【轉載】postgresql儲存過程中返回型別
前言 假如需要在pg上面寫儲存過程,那麼返回型別必定是一個疑問點。 一般而言,對於一個查詢語句,為了可以統一動態返回各種資料,我們是不會蠢到每一個儲存過程都額外編寫一個返回型別 譬如: (id,name,password) 之類的,所以在寫的時候肯定會考慮 setof record這個動
儲存過程中一維陣列接受按分割符拆分的資料
declare -- Local variables here i integer; Lar_Input t_Arr.Arrname; --一維陣列接收 按分隔符拆分 begin -- Test statements here Pkg_n_Cst_String.Pr
sql在所有儲存過程中查詢包含某字串的執行語句
直接在查詢分析器中執行以下程式碼就行: 方法一) select name from sysobjects o, syscomments s where o.id = s.id and text like '%test%' and o.xtype = 'P' 方法二)
Oracle 儲存過程中傳送郵件,並支援使用者驗證 中文標題和內容
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
oracle12C資料庫JSON的應用 --PL/SQL儲存過程中JSON解析應用篇
最近有些專案在資料庫oracle中使用到json格式的資料互動,對於oracle12以上的版本都支援JSON格式資料的使用,剛剛接觸的猿們可以到上一篇oracle資料庫使用json的簡單入門,最好參考官方的API文件關於oracle官方API文件對JSON的支援; 下面就比較詳細的說一下,關