我在oracle中处理过外部表,它可以在包含数据的文件上创建(还有许多其他条件(。那么,全局临时表与外部表有何不同?
外部表从CSV文件中获取其内容。数据库本身不存储任何数据。它们的内容对服务器的所有会话(=连接(都可见(前提是存在必要的访问权限(。数据独立于数据库存在,只有在文件从外部更改时才会被删除(或更改((据我所知,Oracle不能向外部表写入,只能从中读取-但我已经很久没有使用过它们了,所以这可能在Oracle 18或更高版本中发生了更改(
临时表的数据存储和管理在数据库中,但每个会话都在表中保留自己的数据副本。当会话断开连接或事务结束时(取决于临时表的定义(,Oracle会自动删除数据。临时表中的数据永远不会在数据库服务器重新启动后存活下来。
从广义上讲,外部表是一个占位符定义,指向操作系统中某个位置的文件。当您有外部接口以文件形式向您发送数据时,通常会使用(但不限于(这些功能。您可以使用sqlldr将数据加载到普通表中,也可以使用External表指向文件本身,只需查询表即可从文件中读取。但是也有一些限制,比如不能更新外部表。
当您希望在表中保留一些动态信息,使其仅在当前会话中可见时,会使用GTT-全局临时表。如果你想更详细地了解,这两张表上都有不错的文章。
与外部表访问相比,GTT表访问速度更快。