Ошибка ORA-00942 при обращении к таблице после EXECUTE IMMEDIATE create table

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

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

Так, может быть, таблицы XYZ не существует?

RGruca 10.12.2018 14:32

Извините, я ошибся в коде, я его отредактировал.

Levente Takács 10.12.2018 14:38

@KaushikNayak заявление об отклонении ошибки относится к DROP TABLE (например: если таблица не существует, то она выдает ошибку), я не думаю, что это основная причина.

Levente Takács 10.12.2018 14:42

Хорошо .. плохо, я не правильно заметил. Вы уверены, что две временные таблицы созданы до запуска последнего блока PL / SQL? Вы проверяли это через обычный (статический) SQL? Если да, то это может быть проблема с GRANT для пользователя.

Kaushik Nayak 10.12.2018 14:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
340
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме