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

64

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

что-то вроде

Declare table @table (int id)

В SQL Server

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

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

Спасибо

Теги:

3 ответа

100
Лучший ответ

Да, оракул имеет временные таблицы. Ниже приведена ссылка на статью AskTom, описывающую их.
И здесь является официальной документацией CREATE TABLE оракула (прокрутите вниз до раздела CREATE GLOBAL TEMPORARY)
И пример:

CREATE GLOBAL TEMPORARY TABLE today_sales
   ON COMMIT PRESERVE ROWS 
   AS SELECT * FROM orders WHERE order_date = SYSDATE;
  • 37
    Без лишних голосов, но я бы никогда не порекомендовал CREATE TABLE AS SELECT для глобальной временной таблицы - менее опытный разработчик может неправильно понять, что им нужно каждый раз так заполнять GTT. Конечно, это удобный способ скопировать определение из другой таблицы, но этот пример, вероятно, смущает некоторых людей.
  • 0
    Я полностью согласен с Джеффри Кемпом здесь, это всего лишь один из способов создания этой таблицы, я столкнулся с этим и понял, мужик, должен ли я добавить это выражение выбора в мой DDL.
Показать ещё 3 комментария
58

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

  • 13
    Я не до конца понимаю. Вы сказали, что создаете его один раз и только один раз, а не каждый сеанс. Однако вы также сказали, что временная таблица удаляется каждый сеанс. Разве это не значит, что вам нужно будет создавать временную таблицу каждый сеанс?
  • 28
    DELETED , а не DROP пед.
Показать ещё 1 комментарий
27
CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;
  • 9
    Обратите внимание, что строки всегда будут удаляться в конце сеанса; ON COMMIT DELETE ROWS означает, что они будут отброшены раньше, если вы делаете коммит постепенно во время сеанса.
  • 1
    Можно ли удалять строки вручную во время сеанса?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню