2016-09-07 57 views
0

我在進行數據遷移,並且我一直請求檢查一些表名,我沒有DBA權限,USER_TABLE視圖也沒有用,因爲這些表來自其他用戶。所以我的想法是讓這樣的AA查詢(我使用的Oracle SQL Developer):檢查其他用戶的表名

CREATE GLOBAL TEMPORARY TABLE table_exist (NAME VARCHAR(50), EXIST VARCHAR(15)) 
ON COMMIT DELETE ROWS 
/
DECLARE 
v_exist number; 

BEGIN 
SELECT (1) INTO v_exist FROM SCHEMA.TABLE WHERE ROWNUM =1; 
INSERT INTO table_exist (NAME, EXIST) 
VALUES ('TABLE','EXIST'); 

EXCEPTION 
WHEN OTHERS THEN 
INSERT INTO table_exist (NAME, EXIST) 
VALUES ('TABLE','NOT_EXIST'); 
END; 
/
SELECT * FROM table_exist; 
/
DROP TABLE table_exist; 

的問題是,當表中不存在SQL忽視這裏的異常塊是我的錯誤:

Informe de error - 
ORA-06550: línea 5, columna 55: 
PL/SQL: ORA-00942: la tabla o vista no existe 
ORA-06550: línea 5, columna 3: 
PL/SQL: SQL Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

no se ha seleccionado ninguna fila 



Table TABLE_EXIST borrado. 

你能告訴我爲什麼我得到這個錯誤,爲什麼sql不讀取異常塊? (我沒有太多的經驗,在SQL oracle)。

泰克斯,我希望你能幫助我。

+0

這是一個編譯錯誤,不會被異常抓住。如果你想嘗試這種方法,你需要動態的SQL。尋找'立即執行' – vercelli

+0

忘記它,這種方法無論如何不會工作,因爲您不知道表是否存在或您無權訪問它。如果您確實有權訪問它,請嘗試查詢'select owner,table_name from all_tables where owner ='theOtherSchema';' – vercelli

+1

vercelli,ty很多工作! – Abianco

回答

1

各種目錄視圖有三種版本:DBA_,USER_和ALL_。你需要查詢的是ALL_TABLES(不是USER_TABLES,它只顯示你自己的表格,而不是DBA_TABLES,因爲你沒有DBA權限)。 ALL_TABLES會向您顯示您已被授予查看權限的所有表格,包括來自其他用戶的表格。

也許某些「需要」看到你的表將無法看到,因爲你沒有必要的權限。這將表明你被要求做的事情與你獲得的權力之間存在不匹配的現象;將不會有「技術」的方式,這將成爲一個商業問題。

+0

很多!我選擇所有者,從all_tables table_name和它的作品! – Abianco