我在oracle中使用了外部表,可以在包含数据的文件上创建它(具有许多其他条件)。那么,全局临时表与外部表有何不同?
答案 0 :(得分:4)
外部表从例如CSV文件。数据库本身不存储任何数据。它们的内容对于与服务器的所有会话(=连接)可见(提供了必要的访问特权)。数据独立于数据库而存在,并且仅在外部更改文件时才删除(或更改)(据我所知,Oracle无法写入外部表,只能从外部表读取-但我已经使用了很长时间了,因此也许在Oracle 18或更高版本中已更改)
临时表的数据在数据库内部存储和管理,但是每个会话在表中保留自己的数据副本。当会话断开连接或事务结束时,Oracle会自动删除数据(取决于临时表的定义)。临时表中的数据永远不会在数据库服务器重新启动后幸免。
答案 1 :(得分:1)
外部表通常是占位符定义,它指向OS上某个文件。当您具有外部接口以文件形式发送数据时,通常使用(但不限于)这些。您可以使用sqlldr将数据加载到普通表中,也可以使用外部表指向文件本身,只需查询表即可从文件中读取。尽管存在一些限制,例如您无法更新外部表。
GTT-全局临时表用于在表中保留一些即时信息时,仅在当前会话中可见的信息。如果您想更详细地介绍这两个表,则都有不错的文章。
与外部表访问相比,GTT表访问还具有更快的优势。