Как создать временную таблицу в базе данных Oracle?

Я хотел бы создать временную таблицу в базе данных Oracle

что-то вроде

Declare table @table (int id)

в SQL server

и чем заполнить его с помощью оператора select

это возможно?

спасибо

3 ответов


да, Oracle имеет временные таблицы. Вот ссылка на AskTom статья, описывающая их и здесь является официальной документацией oracle CREATE TABLE.

однако в Oracle только сведения во временной таблице является временным. Таблица является обычным объектом, видимым для других сеансов. Это плохая практика часто создавать и удалять временные таблицы в Oracle.

CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;

Oracle 18c добавлено частное временные таблицы, которые имеют один-сессии в памяти объектов. См.документация для получения более подробной информации. Частные временные таблицы можно динамически создавать и удалять.

CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;

временные таблицы могут быть полезны, но они обычно злоупотребляют в Oracle. Их часто можно избежать, объединив несколько шагов в один оператор SQL с помощью встроенных представлений.


просто совет.. Временные таблицы в Oracle отличаются от SQL Server. Вы создаете его один и только один раз, а не каждый сеанс. Строки, которые вы вставляете в него, видны только вашему сеансу и автоматически удаляются (т. е. TRUNCATE, а не DROP) когда вы заканчиваете сеанс (или конец транзакции, в зависимости от того, какое предложение" on COMMIT " вы используете).


CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;