MOZ*_*LLA 29 database oracle temp-tables
我听过这两个术语"临时表"和"全局临时表"在类似的上下文中使用了很多.
两者有什么区别?
Tho*_*Low 54
在Oracle中没有任何区别.在Oracle数据库中创建临时表时,它将自动为全局表,并且您需要包含"全局"关键字.
SQL标准定义了术语"GLOBAL TEMPORARY TABLE"的解释方式,它允许LOCAL或GLOBAL范围.这将允许用户特定表(LOCAL)或每个人(GLOBAL).Oracle仅实现GLOBAL版本.
您放入Oracle临时表的数据特定于您的会话.也就是说,即使有100个用户都使用同一个表,您也可以看到您的数据,并且当您断开连接时(或提交当前事务时),您的数据将从表中删除,具体取决于表设置.
将其与MS SQL-Server进行对比,其中临时表是本地的.如果你创建一个,除了你之外没有人知道你的临时表存在.在Oracle中,创建临时表允许每个人(每个人都可以访问您的模式)查看该表.当您退出会话时,将删除SQL-Server表,并且需要为下一个会话重新创建.在Oracle中,临时表现在是模式的永久部分,即使数据不是.
小智 7
将其与MS SQL-Server进行对比,其中临时表是本地的.如果你创建一个,除了你之外没有人知道你的临时表存在.在Oracle中,创建临时表允许每个人(每个人都可以访问您的模式)查看该表.当您退出会话时,将删除SQL-Server表,并且需要为下一个会话重新创建.在Oracle中,临时表现在是模式的永久部分,即使数据不是(如果不是这样,您可以决定是否保留它).Oracle仅支持全局临时表,使您不必在每个会话中创建表; 它"存在"但它是空的,其内容在每个会话中是唯一的(和私有的).
只需添加有关本地和全局临时表的现有答案,Oracle 18c
就会有真正的“私有临时表”:
私有临时表是在事务或会话结束时自动删除的临时数据库对象。私有临时表存储在内存中,并且仅对创建它的会话可见。
私有临时表将临时表的范围限制为会话或事务,从而为应用程序编码提供更大的灵活性,从而使代码维护更容易并提供更好的即用型功能。
Oracle Live SQL演示:18c 私有临时表:
-- Private temporary tables must be prefixed as per the database parameter
-- 'private_temp_table_prefix'
create private temporary table ORA$PTT_MY_TT ( x int );
-- The table is truly private.
-- It does not even exist in the the data dictionary, only your session
-- By default, the moment you commit, the table ceases to exist
commit;
select * from ORA$PTT_MY_TT;
-- ORA-00942: table or view does not exist
-- This can be changed by specifying that the definition should be preserved
create private temporary table ORA$PTT_MY_TT ( x int )
on commit preserve definition;
insert into ORA$PTT_MY_TT
select rownum from dual
connect by level <= 30;
commit;
select count(*) from ORA$PTT_MY_TT;
-- 30
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
61306 次 |
最近记录: |