Answers:
是的,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不同。您创建它一次,并且仅一次创建,而不是每个会话。插入到行中的行仅对您的会话可见,并且在您结束会话(或事务结束,取决于您使用的“ ON COMMIT”子句)时会自动删除(即,TRUNCATE
不是DROP
)。
DELETED
,而不是DROP
ped。
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
创建表table_temp_list_objects AS
从sys.all_objects中选择o.owner,o.object_name o在哪里o.object_type ='TABLE';