ORA-00942: 表或檢視不存在是比較常見的問題,原因也多種多樣。今天碰到了這個問題,從網上搜到了很多解決方案,在此做一個整理。僅做為記錄方便以後查閱。
1、表或檢視確實不存在或名稱寫錯
2、表名大小寫
Oracle對大小寫敏感,通常在建立和查詢時對名稱資料庫會自動轉為大寫,但語句中有引號時會按引號中的內容保留。例如:
create table "TableName" (
"col1" VARCHAR2(2),
"col2" DATE
這時查詢語句也要相應改成
select * from "TableName";
3、許可權問題導致
平時所做的對其它使用者下資源的操作許可權有些是通過角色授權的,但在儲存過程、函式、觸發器不能直接使用,需要單獨授權。授權語句舉例:
grant select on sys.XXX TO XXX;
4、需要在儲存過程中使用role許可權(這個我沒太看懂,以下程式碼部分為貼上,來自http://www.cnblogs.com/jzbml/p/5991918.html)
SQL> select * from dba_role_privs where grantee='SUK';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------ ------------ ------------ ------------
SUK DBA NO YES
SUK CONNECT NO YES
SUK RESOURCE NO YES
--使用者SUK擁有DBA這個role
--再建立一個測試儲存過程:
create or replace procedure p_create_table
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
--然後測試
SQL> exec p_create_table;
begin p_create_table; end;
ORA-01031: 許可權不足
ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
ORA-06512: 在line 1
--可以看到,即使擁有DBA role,也不能建立表。role在儲存過程中不可用。
--遇到這種情況,我們一般需要顯式進行系統許可權,如grant create table to suk;
--但這種方法太麻煩,有時候可能需要進行非常多的授權才能執行儲存過程
--實際上,oracle給我們提供了在儲存過程中使用role許可權的方法:
--修改儲存過程,加入Authid Current_User時儲存過程可以使用role許可權。
create or replace procedure p_create_table
Authid Current_User is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
--再嘗試執行:
SQL> exec p_create_table;
PL/SQL procedure successfully completed
--已經可以執行了。
我在我遇到的問題中試了這個方法,得到以下結果:
Compilation errors for PACKAGE BODY XXX.XXXX
Error: PLS-00157: AUTHID 只允許在方案級程式中使用
Line: xxxx
Text: PRM_ERRORMSG OUT VARCHAR2) Authid Current_User IS
目前瞭解到的就是這些,有其它解決方法繼續更新。
ORA-00942: 表或檢視不存在是比較常見的問題,原因也多種多樣。今天碰到了這個問題,從網上搜到了很多解決方案,在此做一個整理。僅做為記錄方便以後查閱。
1、表或檢視確實不存在或名稱寫錯
2、表名大小寫
Oracle對大小寫敏感,通常在建立和查詢時對名稱資料庫會自動轉為大寫,但語句中
執行上面的sql時提示"ORA-00942 表或檢視不存在",納悶了,用select * from AUTH.AUTH_ORG_FRAM語句查詢時可以查到資料,但建立檢視時就提示找不到,
原來是,我
報錯:ORA-00942: 表或檢視不存在
情況:在專案中查詢這個表資料的時候報錯
分析:我今天的任務是將專案部署到虛擬機器上執行起來,並且是把本地的資料匯入到由另一家公司專門負責的資料庫中。
這家公司給我的使用者為user01,我將本地本地資料庫的資料匯出為dmp檔案,然後匯入伺服
今天遇到一個問題,自己寫了一個很簡單的儲存過程,編譯的時候,報錯: 表或檢視不存在;
但是:表確實是存在,單獨拿出來查詢,一點問題也沒有。
經過幾番查詢,找到了問題所在: 查詢表的許可權不夠;
解決方案:
用著用著oracle,出現一莫名其妙的錯誤,
建新表後建外來鍵老出錯,報遞迴sql級別1出現錯誤,表或檢視不存在。
百度了下,可能是因為我之前刪了一個系統,因為之前裡面有很多廢表,我就刪了一個,結果悲劇了,我也不知道表名。。
在sql視窗執行命令如下:
alter sess