Я хочу создать временную таблицу в базе данных Oracle
что-то типа
Declare table @table (int id)
На сервере SQL
А затем заполните его оператором select
Является ли это возможным?
Благодарность
Ответы:
Да, у 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 с использованием встроенных представлений.
CREATE TABLE AS SELECT
: выбора из удаленных таблиц со столбцами LOB, поскольку вы не можете напрямую SELECT
из них. Я пишу процедуру для копирования записей из удаленной базы данных, и это было моим решением: перенести записи в GTT, а затем скопировать из него в «настоящую» таблицу.
Просто совет .. Временные таблицы в Oracle отличаются от SQL Server. Вы создаете его ОДИН РАЗ и только ОДИН РАЗ, а не каждую сессию. Строки, которые вы вставляете в него, видны только вашему сеансу и автоматически удаляются (т. Е. TRUNCATE
Нет DROP
), когда вы завершаете сеанс (или завершаете транзакцию, в зависимости от того, какое предложение «ON COMMIT» вы используете).
DELETED
а не DROP
пед.
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
означает, что они будут отброшены раньше, если вы будете делать коммит постепенно во время сеанса.