2012-04-11 117 views
3

我已經創建了一個過程並在其中使用了下面的語句。

select sql_id into v_sql_id from v_$sql where sql_text =v_sql; 

我收到以下錯誤PL/SQL: ORA-00942: table or view does not exist

我已經檢查了同義詞它的主人是PUBLIC,所以應該在這種情況下運行,但它不工作。

另一件事我可以select sql_id from v_$sql where sql_text =v_sql;這在簡單的編輯器。可以任何人幫助我這個。

+0

在我的系統上,視圖被稱爲'v $ sql',而不是'v_ $ sql'。 – Codo 2012-04-11 06:58:42

+0

@Codo:在​​我的V $ sql中,它在'sys'模式下 – 2012-04-11 07:00:18

回答

6

數據庫字典相關或系統表(本例中爲v_ $ sql)爲Oracle sys用戶所有,需要特殊權限才能訪問它們。您需要以sysdba user的身份登錄到oracle數據庫,或者獲取這些權限(您的DBA可能會幫助您完成此操作)以訪問數據字典視圖。

正如this article

The problem is that procedures don't respect roles; only directly granted rights 
are respected. So, that means that table_owner has to regrant the right to select 

提到所以,請嘗試以下授予對所有百科視圖的SELECT,這樣你可以在你的PL/SQL塊使用它。

grant select any dictionary to USERNAME 
+0

:它使用'grant select v $ sql到',謝謝 – 2012-04-11 17:02:30

1

大多數情況下,您正在使用的用戶可以直接通過角色而不是選擇權限訪問視圖。

不幸的是,通過角色獲得的特權在運行PL/SQL時不是主動的。

您需要讓您的DBA將SELECT權限直接授予您的用戶。

+0

好吧,我會問我的DBA相同。 – 2012-04-11 07:12:08

0

查看我的回答here。這可能是因爲你正在使用特定的大寫字母

相關問題