1

我在 oracle 中使用过外部表,它可以在包含数据的文件上创建(具有许多其他条件)。那么,全局临时表与外部表有何不同?

4

2 回答 2

4

外部表从例如 CSV 文件中获取其内容。数据库本身不存储任何数据。它们的内容对服务器的所有会话(=连接)都是可见的(前提是存在必要的访问权限)。数据独立于数据库而存在,只有在文件被外部更改时才会被删除(或更改)(据我所知,Oracle 无法写入外部表,只能从中读取 - 但我已经很久没有使用它们了,所以这可能在 Oracle 18 或更高版本中发生了变化)

临时表的数据在数据库内存储和管理,但每个会话在表中保留自己的数据副本。当会话断开或事务结束时(取决于临时表的定义),Oracle 会自动删除数据。临时表中的数据永远不会在数据库服务器重新启动后继续存在。

于 2019-11-11T08:00:48.087 回答
1

从广义上讲,外部表是一个占位符定义,它指向操作系统上某处的文件。这些通常用于(不限于)当您有一个外部接口向您发送文件中的数据时。您可以使用 sqlldr 将数据加载到普通表中,也可以使用外部表指向文件本身,您可以简单地查询表以从文件中读取。虽然有一些限制,例如您无法更新外部表。

GTT - 当您想在表中保留一些动态信息以使其仅在当前会话中可见时,使用全局临时表。如果您想更详细地了解,这两个表上都有很好的文章。

与外部表访问相比,GTT 表访问会更快。

于 2019-11-11T09:58:19.800 回答