Как создать временную таблицу в базе данных Oracle? - PullRequest
82 голосов
/ 20 апреля 2010

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

что-то вроде

Declare table @table (int id)

На сервере SQL

А затем заполните его оператором выбора

Возможно ли это?

Спасибо

Ответы [ 3 ]

121 голосов
/ 20 апреля 2010

Да, у Oracle есть временные таблицы. Вот ссылка на статью AskTom , описывающую их, а здесь - официальная документация оракула 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 с помощью встроенных представлений.

68 голосов
/ 20 апреля 2010

Просто подсказка. Временные таблицы в Oracle отличаются от SQL Server. Вы создаете это ОДИН РАЗ и только ОДИН РАЗ, а не каждый сеанс. Строки, которые вы вставляете в него, видны только для вашего сеанса и автоматически удаляются (т. Е. TRUNCATE, а не DROP), когда вы завершаете сеанс (или завершаете транзакцию, в зависимости от того, какое предложение «ON COMMIT» вы использовать).

33 голосов
/ 01 февраля 2013
CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...