我听过这两个术语"临时表"和"全局临时表"在类似的上下文中使用了很多.
两者有什么区别?
在Oracle中没有任何区别.在Oracle数据库中创建临时表时,它将自动为全局表,并且您需要包含"全局"关键字.
SQL标准定义了术语"GLOBAL TEMPORARY TABLE"的解释方式,它允许LOCAL或GLOBAL范围.这将允许用户特定表(LOCAL)或每个人(GLOBAL).Oracle仅实现GLOBAL版本.
您放入Oracle临时表的数据特定于您的会话.也就是说,即使有100个用户都使用同一个表,您也可以看到您的数据,并且当您断开连接时(或提交当前事务时),您的数据将从表中删除,具体取决于表设置.
将其与MS SQL-Server进行对比,其中临时表是本地的.如果你创建一个,除了你之外没有人知道你的临时表存在.在Oracle中,创建临时表允许每个人(每个人都可以访问您的模式)查看该表.当您退出会话时,将删除SQL-Server表,并且需要为下一个会话重新创建.在Oracle中,临时表现在是模式的永久部分,即使数据不是.
将其与MS SQL-Server进行对比,其中临时表是本地的.如果你创建一个,除了你之外没有人知道你的临时表存在.在Oracle中,创建临时表允许每个人(每个人都可以访问您的模式)查看该表.当您退出会话时,将删除SQL-Server表,并且需要为下一个会话重新创建.在Oracle中,临时表现在是模式的永久部分,即使数据不是(如果不是这样,您可以决定是否保留它).Oracle仅支持全局临时表,使您不必在每个会话中创建表; 它"存在"但它是空的,其内容在每个会话中是唯一的(和私有的).
请注意,全局临时表没有与之关联的统计信息,因此请查看是否应设置实例的动态采样级别,以确保在分析时对未分析的表进行采样.否则,启发式方法可能会导致恶劣的执行计划.