Я пытаюсь запустить следующий фрагмент в PL / SQL Developer, но последняя команда выдает сообщение об ошибке ORA-00942: таблица или представление не существует.
DECLARE
sqlCommandABC varchar2(30000) := 'create table ABC_TMP
tablespace &TBS_NORMAL_TABLES initrans 32 AS (SELECT ABC_ID from ABC where ID <=400000)';
BEGIN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE ABC_TMP';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
EXECUTE IMMEDIATE sqlCommandABC;
COMMIT;
END;
/
DECLARE
sqlCommandDEF varchar2(30000) := 'create table DEF_TMP
tablespace &TBS_NORMAL_TABLES initrans 32 AS (SELECT DEF_ID from DEF where ID <=15000)';
BEGIN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE DEF_TMP';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
EXECUTE IMMEDIATE sqlCommandDEF;
COMMIT;
END;
/
DECLARE
sqlCommandXYZ varchar2(30000) := 'create table XYZ_TMP
tablespace &TBS_NORMAL_TABLES initrans 32 AS (select ID from XYZ where ABC_1 in (SELECT ABC_ID from ABC_TMP) or DEF_1 in (SELECT DEF_ID from DEF_TMP))';
BEGIN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE XYZ_TMP';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
EXECUTE IMMEDIATE sqlCommandXYZ;
COMMIT;
END;
/
Я хочу создать две временные таблицы, выбрав данные из исходной таблицы с некоторым условием в соответствии с логикой.
После создания ABC_TMP и DEF_TMP мне нужно использовать их в условии для выбора третьей временной таблицы.
Таблица XYZ_TMP имеет два условия: одно для записей ABC_TMP, а другое - для записей DEF_TMP. Это третье предложение создания таблицы вызывает ошибку.
Я знаю, что могу использовать здесь исходные выборки, но они довольно сложны и имеют относительно высокую стоимость, поэтому, если это возможно, я хочу использовать отфильтрованные таблицы. Я также знаю, что если я открою новый сеанс после создания первых двух таблиц, он будет работать, но я хочу выполнить их в одном скрипте.
Извините, я ошибся в коде, я его отредактировал.
@KaushikNayak заявление об отклонении ошибки относится к DROP TABLE (например: если таблица не существует, то она выдает ошибку), я не думаю, что это основная причина.
Хорошо .. плохо, я не правильно заметил. Вы уверены, что две временные таблицы созданы до запуска последнего блока PL / SQL? Вы проверяли это через обычный (статический) SQL? Если да, то это может быть проблема с GRANT для пользователя.





согласно предоставленной информации я понял, что DEF_TMP и ABC_TMP успешно созданы и, следовательно, доступны. в этом случае здесь есть две возможности.
Так, может быть, таблицы XYZ не существует?