«ЕСЛИ OBJECT_ID (N'tempdb..#tmp') НЕ ЯВЛЯЕТСЯ NULL DROP TABLE #tmp;" в Oracle SQL Developer

Есть ли эквивалент SQL Server IF OBJECT_ID (N'tempdb..#tmp') IS NOT NULL DROP TABLE #tmp; в Oracle?

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

Я буквально ничего не знаю о PL/SQL или Oracle, но отвечает ли это на ваш вопрос? Oracle: если таблица существует

Larnu 04.01.2023 16:30

Примечание: синтаксис DROP TABLE IF EXISTS уже некоторое время доступен и в SQL Server.

Larnu 04.01.2023 16:31

Привет @Larnu, спасибо за ответ. Я пробую разные версии по ссылке, но они выдают такие ошибки, как «Обычно ошибка компиляции PL/SQL».

California Dreaming 04.01.2023 16:51
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам не нужно проверять, существует ли таблица. Используйте EXECUTE IMMEDITATE и попробуйте удалить таблицу, и если она не существует, поймайте исключение:

DECLARE
  does_not_exist EXCEPTION;
  PRAGMA EXCEPTION_INIT(does_not_exist, -942);
BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE tmp';
  DBMS_OUTPUT.PUT_LINE('The table was dropped.');
EXCEPTION
  WHEN does_not_exist THEN
    DBMS_OUTPUT.PUT_LINE('The table did not exist.');
END;
/

Однако, если вам нужна частная временная таблица, которая автоматически удаляется после завершения транзакции, выполните следующие действия:

CREATE PRIVATE TEMPORARY TABLE ora$ptt_temp AS
  SELECT * FROM tmp;

Затем, когда вы COMMIT, таблица автоматически удаляется (и вы можете воссоздать ее в следующей транзакции).

рабочий пример

Привет @MT0. Как я могу включить вышеуказанное в запрос, например: ЕСЛИ OBJECT_ID (N'tempdb..#temp') НЕ NULL DROP TABLE #temp; выберите * в #temp из tableabc

California Dreaming 04.01.2023 16:57

@CaliforniaDreaming Если вы удалили таблицу, вы не можете вставить ее, потому что она не существует. Вам нужно сначала воссоздать его. Если вы хотели постоянный стол, то CREATE TABLE temp AS SELECT * FROM tableabc. (Тем не менее, похоже, это проблема XY, поскольку вы, кажется, очень сосредоточены на воссоздании метода работы SQL Server, а не на попытке понять, как обычно это делает Oracle).

MT0 04.01.2023 17:00

Я именно спрашиваю, как Oracle будет делать то, что я хочу, и я вижу, что это не так быстро и просто, как в SQL Server. Спасибо за ваш ответ.

California Dreaming 04.01.2023 17:06

@CaliforniaDreaming Просто используйте частную временную таблицу, и тогда вам не нужно удалять ее в конце транзакции, поскольку это происходит автоматически. Как я уже сказал, то, что вы хотите, кажется XY-проблемой, и если вы делаете это способом Oracle, а не пытаетесь воссоздать способ SQL Server, тогда это становится намного проще.

MT0 04.01.2023 17:13

большое спасибо!! @MT0 это именно то, что мне было нужно! и я просто всегда сохраняю ora$ptt_, а затем могу добавить дополнительные символы.

California Dreaming 04.01.2023 18:54

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