首页 文章

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

提问于
浏览
76

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

就像是

Declare table @table (int id)

在SQL服务器中

而不是用select语句填充它

可能吗?

谢谢

3 回答

  • 29

    是的,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语句中,通常可以避免它们 .

  • 66

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

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

相关问题