Oracle儲存過程跨使用者執行查詢報錯
在Oracle中,在USERA下編寫一個儲存過程,該儲存過程中引用了另一個使用者USERB下的表或檢視物件。編譯該儲存過程,出現編譯錯誤。報ORA-00942: table or view does not exist。
但是該表或檢視的確在USERB下存在,而且已經授予了USERA DBA角色的許可權,即可以查詢任何使用者下的表或檢視。將儲存過程中的該報錯語句複製貼上到SQL視窗中執行,不報錯。為什麼放在儲存過程中會報上述錯誤呢?
經過研究,發現ORACLE對於在儲存過程中引用其他使用者下的表或檢視物件有特別的限制,要求USERA對這個表或檢視具有直接的SELECT許可權,而不是通過角色,如DBA間接獲取的許可權。否則就會報上述錯誤導致編譯不通過。
解決該問題的方法如下: 1.登入到USERB使用者下。 2.GRANT SELECT ON 表名(或檢視名) TO USERA 3.重新登入到USERA使用者下。 4.重新編譯儲存過程,發現編譯通過。問題解決。
相關推薦
Oracle儲存過程跨使用者執行查詢報錯
在Oracle中,在USERA下編寫一個儲存過程,該儲存過程中引用了另一個使用者USERB下的表或檢視物件。編譯該儲存過程,出現編譯錯誤。報ORA-00942: table or view does not exist。 但是該表或檢視的確在USERB下存在,而且已經授予了
oracle 儲存過程 例項 迴圈 給查詢賦值 遊標取值
CREATE OR REPLACE PROCEDURE p_updete_gs is --僅供參考 i_jdid varchar(32); i_ryid varchar(32); cursor cur is --
Oracle儲存過程長時間執行檢查
1:查V$DB_OBJECT_CACHESELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0';注意:CUX_OE_ORDER_RPT_PKG 為儲存過程的名稱。發現 locks=22:按物件查出sid的
oracle儲存過程中如何執行動態SQL語句
有時需要在oracle儲存過程中執行動態SQL語句 ,例如表名是動態的,或欄位是動態的,或查詢命令是動態的,可用下面的方法: set serveroutput ondeclare n number; sql_stmt varchar2(50); t varc
oracle儲存過程中使用execute immediate執行sql報ora-01031許可權不足的問題
--問題描述: 使用者在儲存過程中呼叫execute immediate 執行 create table語句報錯 ORA-01031, 並且反映直接執行該語句無報錯。--原因根據問題可以發現使用者確實有create table的許可權,查詢dba_role_privs 和 d
ORACLE儲存過程執行報“ora-00942表或檢視不存在”、“ORA-01031:許可權不足”的解決方式
目錄: 一、案例 二、思索過程 三、解決方案 四、後記 正文 一、案例: 在userA使用者下書寫儲存過程如下: create or replace procedure sp_test is v_str1 varchar2(1000); begi
oracle 儲存過程 報 無效字元
lv_sql:=' insert into ETL_SUCESS_AMOUNT select SEQ_OS_ETL_AMOUNTID.NEXTVAL AS AMOUNTID,1,AMOUNT_DATA,AMOUNT_HOUR, serviceid,porta
oracle儲存過程把查詢到的值更新到別的表
create or replace procedure update_nst_t_Clime2 as cursor c_db is select * from NST_T_FRAME f
Oracle儲存過程執行初體驗
1、首先在plsql中建立一個插入語句的儲存過程(已經建立好表,兩列,id,name) create or replace procedure proc_suibian_insert(id in var
java傳list到Oracle儲存過程執行慢
儲存過程功能是迴圈對list遍歷,對錶進行插入操作,插入異常則進行修改操作。 可能為update語句執行慢,可是表裡有主鍵,update時主鍵為條件,走主鍵應該不會慢。 單獨把update語句拿出執行,不慢。 最終找出原因,list中物件用的為nvarchar而表裡主鍵為varchar2,執行語句時Or
用動態sql執行oracle儲存過程
1、呼叫procedure: v_sql := 'Begin pkg_name.procedure_name(:in_v1, :in_v2, :out_v1, :out_v2); End;' ; EXECUTE IMMEDI
指令碼實現oracle 儲存過程後臺執行
---問題描述 幾個存過,比對丟失的充值卡,都是幾億的表,在不同的資料庫,儲存過程用DB_LINK實現比對,並且將丟失的資料插入表種,寫了幾個存過,執行了十幾天,用shell指令碼實現存過後臺執行 ---shell指令碼 --money_test1 為儲存過程名字
linux shell 執行oracle儲存過程
在linux下用shell執行oracle的儲存過程 #### 函式 #### 說 明:執行oracle儲存過程 #### 輸入引數:{資料庫tns}{資料庫使用者名稱}{資料庫密碼}{儲存過程名}{批處理日期} #### 輸出引數:儲存過程執行結果 function
工作總結24 Windows的任務計劃,定時執行oracle儲存過程或語句塊
1、在pl/sql中,建立一個儲存過程 create or replace procedure pro as begin /***業務程式***/ commit; end pro; 2、在某
ORACLE儲存過程plsql建立與執行(一)
關鍵字說明 a)建立引數的in \ out \in out說明 IN:傳入引數進PROCEDURE給儲存過程用; OUT:將儲存過程處理的結果傳出來; IN OUT:傳入引數給儲存過程,再將處理後的結果傳出來; b)PLS
Java執行Oracle儲存過程並接收返回值
Java執行Oracle儲存過程並接收多個返回值(集合/數值) Java程式碼: package com.pure.util; import java.sql.Connection; import java.sql.DriverManager; import java.s
oracle儲存過程報"無效的列索引"的錯誤
因為是新手上路,所以犯的錯誤也很簡單,所以就貼一小部分相關的程式碼了. final String sql = "{call pkg_bd_interface.sp_bd_interface(?,?,?)}";CallableStatement call;call
oracle 儲存過程 輸出結果和正常查詢不一樣
我的專案是一個學校的教務系統的專案,有很多人蔘與過,因此有很多前人的坑 今天儲存過程裡就一條查詢語句,帶一個返回值,輸出的結果始終和單條查詢語句正常查詢的結果不一樣 儲存過程: CREATE OR REPLACE PROCEDURE PROC( result in out
oracle儲存過程執行時間的統計
過程的執行時間統計 declare v_starttime date; v_endtime date; v_sql varchar2(2000) := ''; begin v_starttime := sysdate; /****執行內容******/ dbms_out
oracle儲存過程定時執行簡單例子
/*插入天氣語句*/ INSERT INTO ENERGY.WEATHER VALUES(SEQ_WEATHER.nextVal,sysdate,'多雲轉晴','24','30','西南風','南風','微風','4','2','70','89','420','','適合旅