Есть ли эквивалент SQL Server IF OBJECT_ID (N'tempdb..#tmp') IS NOT NULL DROP TABLE #tmp; в Oracle?
Я хочу создать локальную временную таблицу без указания имен столбцов, сведений о столбцах и т. д., вставить в нее любые результаты запроса и удалить ее, если вся транзакция будет перезапущена.
Примечание: синтаксис DROP TABLE IF EXISTS уже некоторое время доступен и в SQL Server.
Привет @Larnu, спасибо за ответ. Я пробую разные версии по ссылке, но они выдают такие ошибки, как «Обычно ошибка компиляции PL/SQL».





Вам не нужно проверять, существует ли таблица. Используйте 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
@CaliforniaDreaming Если вы удалили таблицу, вы не можете вставить ее, потому что она не существует. Вам нужно сначала воссоздать его. Если вы хотели постоянный стол, то CREATE TABLE temp AS SELECT * FROM tableabc. (Тем не менее, похоже, это проблема XY, поскольку вы, кажется, очень сосредоточены на воссоздании метода работы SQL Server, а не на попытке понять, как обычно это делает Oracle).
Я именно спрашиваю, как Oracle будет делать то, что я хочу, и я вижу, что это не так быстро и просто, как в SQL Server. Спасибо за ваш ответ.
@CaliforniaDreaming Просто используйте частную временную таблицу, и тогда вам не нужно удалять ее в конце транзакции, поскольку это происходит автоматически. Как я уже сказал, то, что вы хотите, кажется XY-проблемой, и если вы делаете это способом Oracle, а не пытаетесь воссоздать способ SQL Server, тогда это становится намного проще.
большое спасибо!! @MT0 это именно то, что мне было нужно! и я просто всегда сохраняю ora$ptt_, а затем могу добавить дополнительные символы.
Я буквально ничего не знаю о PL/SQL или Oracle, но отвечает ли это на ваш вопрос? Oracle: если таблица существует