私はデータ移行中ですが、いくつかのテーブル名を確認する要求がありました。私は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オラクルであまり経験がありません)。
タク、私があなたを助けてくれることを願っています。
これはコンパイルエラーで、例外によってキャッチされません。このアプローチを試したい場合は、動的SQLが必要です。 '即時実行'を探してください – vercelli
忘れてしまいますが、テーブルが存在しないか、アクセスできないかどうかわからないので、この方法はとにかく動作しません。あなたのユーザがそれにアクセスしている場合、 'owner、 'theOtherSchema'; ' – vercelli
vercelliのall_tablesからtable_nameを選択してください。 – Abianco