Создание временной таблицы
Синтаксис для создания
временных таблиц практически аналогичен синтаксису для создания регулярных
таблиц, но есть некоторые операторы, которые используются только
для временных таблиц:
ОN COMMIT DELETE ROWS используется во временных таблицах, данные которой
существуют в пределах одной транзакции.
Oracle удаляет все строки - все данные из временной
таблицы после завершения транзакции, после выполнения команды COMMIT.
Данная инструкция
подразумевается по умолчанию, то есть при создании временной таблицы -
она всегда будет ОN COMMIT DELETE ROWS
ОN COMMIT PRESERVE ROWS используется во временных таблицах, данные которой
существуют в пределах одной сессии. СУБД Oracle удаляет все строки из временной таблицы - очищает
таблицу после завершения сессии.
Примеры
Данные примеры
продемонстрируют создание и
использование временных таблиц, отличия временных таблиц ОN COMMIT DELETE ROWS и ОN COMMIT PRESERVE ROWS, отличие временных таблиц от таблиц
регулярных.
Все примеры построены на
основе стандартной демонстрационной схемы SCOTT БД ORACLE
• Пример создании временной таблицы:
CREATE GLOBAL TEMPORARY TABLE scott.temp_dept
(
deptno
NUMBER(2,0),
dname
VARCHAR2(14)
) ON COMMIT PRESERVE ROWS;
Данный пример демонстрирует
создание временной таблицы, данные которой, относятся к сессии.
• Пример создания временной таблицы с
использованием подзапроса
CREATE GLOBAL TEMPORARY
TABLE scott.min_salesemp
ON COMMIT PRESERVE ROWS
AS SELECT * FROM scott.emp WHERE sal < 2000;
Данный пример демонстрирует
создание временной таблицы на основе подзапроса, заполненные данные для
этой таблицы актуальны только для текущей сессии. Если попробовать прочитать
таблицу min_salesemp из
другой сессий, то таблица будет пустой.
• Пример создания временной таблицы с объектным
типом колонки
CREATE TYPE scott.person_t AS OBJECT (NAME VARCHAR2(100), ssn NUMBER);
CREATE GLOBAL TEMPORARY TABLE
scott.tmp_obj
(
person
scott.person_t
)
ON COMMIT DELETE ROWS;
Этот пример демонстрирует,
что использование объектных типов данных, вполне правомерно для
временных таблиц.
• Использование индексов во временных таблицах
CREATE GLOBAL TEMPORARY TABLE
scott.city_dept
(
deptno NUMBER(2,0),
dname VARCHAR2(14),
CONSTRAINT pk_city_dept PRIMARY KEY (deptno)
)
ON COMMIT DELETE ROWS;
COMMENT ON COLUMN
scott.city_dept.deptno IS 'DEPARTMENT NUMBER';
COMMENT ON COLUMN
SCOTT.CITY_DEPT.DNAME IS'DEPARTMENT NAME';
CREATE UNIQUE INDEX scott.pk_city_dept_dname
ON scott.city_dept (deptno,dname);
CREATE INDEX scott.idx_dname ON scott.city_dept (dname);
Данный пример показывает,
что во временных таблицах можно использовать индексы и ограничения - CONSTRAINT , как и в регулярных таблицах.
|