111

我想在 Oracle 数据库中创建一个临时表

就像是

Declare table @table (int id)

在 SQL 服务器中

然后用 select 语句填充它

是否可以?

谢谢

4

4 回答 4

152

是的,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 语句中来避免它们。

于 2010-04-19T23:13:10.573 回答
81

只是一个提示.. Oracle 中的临时表与 SQL Server 不同。您创建它一次且仅一次,而不是每个会话。您插入其中的行仅对您的会话可见,并且在您结束会话(或事务结束,取决于您使用的“ON COMMIT”子句)时自动删除(即,TRUNCATE不)。DROP

于 2010-04-19T23:34:51.177 回答
39
CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;
于 2013-02-01T09:32:36.657 回答
-3
CREATE TABLE table_temp_list_objects AS
SELECT o.owner, o.object_name FROM sys.all_objects o WHERE o.object_type ='TABLE';
于 2020-02-27T17:39:55.080 回答