如何在Oracle数据库中创建临时表?

时间:2010-04-19 23:09:03

标签: sql oracle

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

类似

Declare table @table (int id)

在SQL server

然后用select语句填充它

有可能吗?

由于

4 个答案:

答案 0 :(得分:120)

是的,Oracle有临时表。这是一篇描述它们的AskTom文章的链接,here是官方的oracle CREATE TABLE文档。

但是,在Oracle中,只有临时表中的数据是临时的。该表是其他会话可见的常规对象。在Oracle中经常创建和删除临时表是一种不好的做法。

CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;

Oracle 18c添加了私有临时表,它们是单会话内存中对象。有关详细信息,请参阅the documentation。可以动态创建和删除私有临时表。

CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;

临时表可能很有用,但它们通常在Oracle中被滥用。通过使用内联视图将多个步骤组合到单个SQL语句中,通常可以避免它们。

答案 1 :(得分:67)

只是一个提示.. Oracle中的临时表与SQL Server不同。您创建ONCE并且仅创建ONCE,而不是每个会话。您插入其中的行仅对您的会话可见,并且当您结束会话(或交易结束,具体取决于哪个“ON”时)会自动删除(即TRUNCATE,而不是DROP) COMMIT“你使用的条款。”

答案 2 :(得分:31)

CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;

答案 3 :(得分:-2)

创建表table_temp_list_objects AS

从sys.all_objects中选择o.owner,o.object_name o在哪里o.object_type ='TABLE';