Я хочу создать временную таблицу в базе данных Oracle
что-то типа
Declare table @table (int id)
На сервере SQL
А затем заполните его оператором select
Является ли это возможным?
Благодарность
источник
Я хочу создать временную таблицу в базе данных 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
означает, что они будут отброшены раньше, если вы будете делать коммит постепенно во время сеанса.СОЗДАТЬ ТАБЛИЦУ table_temp_list_objects AS
ВЫБЕРИТЕ o.owner, o.object_name FROM sys.all_objects o WHERE o.object_type = 'TABLE';
источник