2016-09-07 5 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オラクルであまり経験がありません)。

タク、私があなたを助けてくれることを願っています。

+0

これはコンパイルエラーで、例外によってキャッチされません。このアプローチを試したい場合は、動的SQLが必要です。 '即時実行'を探してください – vercelli

+0

忘れてしまいますが、テーブルが存在しないか、アクセスできないかどうかわからないので、この方法はとにかく動作しません。あなたのユーザがそれにアクセスしている場合、 'owner、 'theOtherSchema'; ' – vercelli

+1

vercelliのall_tablesからtable_nameを選択してください。 – Abianco

答えて

1

さまざまなカタログビューには、DBA_、USER_、およびALL_という3つのバージョンがあります。照会する必要があるのはALL_TABLESUSER_TABLESではなく、自分のテーブルのみを表示し、DBA権限を持たないためDBA_TABLESではありません)。 ALL_TABLESは、他のユーザーを含め、あなたが閲覧する権限を与えられたすべてのテーブルを表示します。

必要な権限がないため、あなたが見たいテーブルの一部が表示されないことがあります。それは、あなたがしなければならないことと与えられた力との間に不一致があるという兆候でしょう。その周りに "技術的な"方法はありません、それはビジネスの問題になるでしょう。

+0

タイはたくさん!!私は選択所有者、all_tablesからtable_nameとそれを行うと動作します! – Abianco

関連する問題