oracle儲存過程中使用execute immediate執行sql報ora-01031許可權不足的問題
使用者在儲存過程中呼叫execute immediate 執行 create table語句報錯 ORA-01031,
並且反映直接執行該語句無報錯。
--原因
根據問題可以發現使用者確實有create table的許可權,
查詢dba_role_privs 和 dba_sys_privs 發現使用者有 resource許可權,但並無顯示的 create table許可權。
在儲存過程中呼叫execute immediate執行sql語句,則使用者必須有顯示的賦權,而使用者的角色許可權在這裡不起作用。
所以會報 ora-01031 錯誤。
--解決
1、可以顯示的賦給使用者 create table許可權
grant create table to user;
2、可以在儲存過程上使用呼叫者許可權。
CREATE OR REPLACE PROCEDURE test_proc
(a NUMBER,
b VARCHAR
) AUTHID CURRENT_USER IS
轉自:https://blog.csdn.net/royzhang7/article/details/51172413
相關推薦
oracle儲存過程中使用execute immediate執行sql報ora-01031許可權不足的問題
--問題描述: 使用者在儲存過程中呼叫execute immediate 執行 create table語句報錯 ORA-01031, 並且反映直接執行該語句無報錯。--原因根據問題可以發現使用者確實有create table的許可權,查詢dba_role_privs 和 d
儲存過程中傳參執行sql語句
CREATE OR REPLACE PROCEDURE XXX.xXX( //傳進來的引數值,使用逗號隔開 workProSchname in varchar2(200), xuenian in varchar2(200), typeid in varchar2(200),
Oracle 儲存過程中執行動態SQL,動態表名
create or replace procedure mw_sys.clearrubbishdatefy2 is type table_type is table of mw_app.mwt_ud_yscsjdl.tablename%type; tablenameAr
oracle儲存過程中如何執行動態SQL語句
有時需要在oracle儲存過程中執行動態SQL語句 ,例如表名是動態的,或欄位是動態的,或查詢命令是動態的,可用下面的方法: set serveroutput ondeclare n number; sql_stmt varchar2(50); t varc
Oracle PLSQLl的多執行緒程式設計架構 儲存過程中使用多執行緒 定時任務 作業排程計劃 JOB SCHEDULE
基於Oracle plsql的多執行緒程式設計架構 (附儲存過程) 1年前 1413 作者介紹 馮守東,北京科訊華通科技發展有限公司高階專案經理。超12年Oracle開發及管理經驗,多年運營商和政府企業級系統運維經驗,曾獲得東軟最佳設計方案獎。熟悉Weblogic、TU
sql(join中on與where區別) / NVL函式 / oracle儲存過程中is和as區別 / JAVA呼叫資料庫儲存過程
left join :左連線,返回左表中所有的記錄以及右表中連線欄位相等的記錄。 right join :右連線,返回右表中所有的記錄以及左表中連線欄位相等的記錄。 inner join: 內連線,又叫等值連線,只返回兩個表中連線欄位相等的行。 full join:外連線,返回兩個表中的行:left jo
oracle儲存過程中應用動態sql
需求背景:對有些資料庫操作較多的功能演算法需求,或使用應用程式程式碼多次連線操作資料,會造成較大效能損耗,或者系統動態引數化如要查詢的表名是存在資料庫裡的,為節減網路連線開銷,建議使用儲存過程實現資料庫操作需求的演算法。動態sql ,意思是sql語句並不是事先明確的,而是可
Oracle 儲存過程中傳送郵件,並支援使用者驗證 中文標題和內容
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
oracle儲存過程中 RETURNING INTO的含義
DECLARE Row_id ROWID; info VARCHAR2(40); BEGIN INSERT INTO dept VALUES (91, 'SERVICE', 'BEIJING') RETURNING rowid,
oracle儲存過程中%type的含義
例子: CREATE OR REPLACE procedure getDeptById ( v_deptno in dept.deptno%type ) is v_dname dept.dname%type; v_loc dept.loc%type; begin select dn
Oracle儲存過程中跳出迴圈的寫法
記錄exit和return的用法 1:exit用來跳出迴圈 loop IF V_KBP IS NULL THEN EXIT; END IF; end loop; 2:return跳出儲存過程 loop IF V_KBP IS NULL
Oracle儲存過程中包的使用舉例
一、建立測試表 --建立測試表 create table pes(ID number(10),NAME varchar2(20),pwd varchar2(20),TYPE VARCHAR(20)); insert into pes values(1,'xzw','88
Oracle 儲存過程 中如何使用事務Transaction 自主事務 自治事務
Oracle基礎 儲存過程和事務 一、事務和儲存過程 在儲存過程中如何使用事務。當需要在儲存過程中同時執行多條新增、修改、刪除SQL語句時,為了保證資料完整性,我們需要使用事務。使用方式和在PL-SQL中非常相似,但也有一些區別。 --帶事務的儲存過程 C
oracle儲存過程中is和as 的使用
在儲存過程(PROCEDURE)和函式(FUNCTION)中兩者都可以使用,但是有區別:使用IS 將無法使用除錯模式除錯該儲存過程(函式) 在檢視(VIEW)中只能用AS不能用IS; 在遊標(CURSO
儲存過程使用shell指令碼執行sql檔案
今天接到的需求是把所有表的建立寫到儲存過程裡面。 收到建立表的指令碼之後就傻了,60-70個表,還包含儲存過程、檢視等。 那麼如何解決呢。 思路就是在儲存過程裡面使用shell指令碼執行sql指令碼檔案。 通過MSDN得到執行shell的函式:xp_cmdshell。 下面
Oracle儲存過程中游標For迴圈使用
procedure copy(a_id int) is cursor t_cursor is select * from table f where f.id = a_id; v_row table%rowtype; begin
在oracle儲存過程中建立臨時表
在oracle的儲存過程中,不能直接使用DDL語句,比如create、alter、drop、truncate等。 那如果我們想在儲存過程中建立一張臨時表就只能使用動態sql語句了: create o
Oracle 儲存過程中的DDL語句
Oracle的儲存過程,是我們使用資料庫應用開發的重要工具手段。在儲存過程中,我們大部分應用場景都是使用DML語句進行資料增刪改操作。本篇中,我們一起探討一下資料定義語句DDL在儲存過程中使用的細節和要點。 1、“借道而行”的DDL 從Oracle PL/SQL和儲存過
Oracle 儲存過程中的迴圈語句寫法
首先科普一下: oracle 遊標屬性 sql%found sql%notfound sql%rowcount 當執行一條DML語句後,DML語句的結果儲存在四個遊標屬性中,這些屬性用於控制程式流程或者瞭解程式的狀態。當執行DML語句時,PL/SQL開啟一個內建遊標並處理結果,遊標是維護查詢結果的記憶體中
ORACLE儲存過程plsql建立與執行(一)
關鍵字說明 a)建立引數的in \ out \in out說明 IN:傳入引數進PROCEDURE給儲存過程用; OUT:將儲存過程處理的結果傳出來; IN OUT:傳入引數給儲存過程,再將處理後的結果傳出來; b)PLS