У меня есть миграция данных, и я просил проверить некоторые имена таблиц, у меня нет разрешений DBA, и представление USER_TABLE не полезно, потому что таблицы принадлежат другому пользователю. Так что моя идея состоит в том, чтобы сделать аа запрос следующим образом (я использую разработчик Oracle SQL):Проверить имена других пользователей
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).
Thaks, я надеюсь, вы можете мне помочь.
Это ошибка компиляции и не будет исключена. Если вы хотите попробовать этот подход, вам понадобится динамический sql. Ищите 'execute немедленный' – vercelli
Забудьте об этом, этот подход не сработает, так как вы не узнаете, существует ли таблица, или у вас нет доступа к ней. Если у вас есть доступ к нему с вашим пользователем, попробуйте запросить 'select owner, table_name from all_tables, где owner = 'theOtherSchema';' – vercelli
vercelli, много работает! – Abianco