我在進行數據遷移,並且我一直請求檢查一些表名,我沒有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)。
泰克斯,我希望你能幫助我。
這是一個編譯錯誤,不會被異常抓住。如果你想嘗試這種方法,你需要動態的SQL。尋找'立即執行' – vercelli
忘記它,這種方法無論如何不會工作,因爲您不知道表是否存在或您無權訪問它。如果您確實有權訪問它,請嘗試查詢'select owner,table_name from all_tables where owner ='theOtherSchema';' – vercelli
vercelli,ty很多工作! – Abianco