Я хотів би створити тимчасову таблицю в базі даних 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означає, що їх буде відкинуто раніше, якщо ви поступово виконуєте комісію під час сеансу.