Я пытаюсь запустить следующий фрагмент в 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.Это третье предложение создания таблицы выдает ошибку.
Я знаю, что я мог бы использовать оригинальные выборки здесь, но они довольно сложны и имеют относительно высокую стоимость, поэтому, если это возможно, я хочу использовать отфильтрованные таблицы.Я также знаю, что если я открою новый сеанс после создания первых двух таблиц, он будет работать, но я хочу выполнить их в одном сценарии.