ORA-00942 ошибка при обращении к таблице после EXECUTE IMMEDIATE создать таблицу - PullRequest
0 голосов
/ 10 декабря 2018

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

Я знаю, что я мог бы использовать оригинальные выборки здесь, но они довольно сложны и имеют относительно высокую стоимость, поэтому, если это возможно, я хочу использовать отфильтрованные таблицы.Я также знаю, что если я открою новый сеанс после создания первых двух таблиц, он будет работать, но я хочу выполнить их в одном сценарии.

1 Ответ

0 голосов
/ 10 декабря 2018

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

  • Во-первых, таблица XYZ не существует
  • Во-вторых, пользователь, пытающийся выполнить эту команду, не имеет права выбора.
...