临时表的使用

临时表的使用方法:

创建Oracle临时表,可以有两种类型的临时表:

会话级的临时表

事务级的临时表。

1) 会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表创建方法:

Create Global Temporary Table Table_Name

(Col1 Type1,Col2 Type2...) On Commit Preserve Rows;

举例:

create global temporary table Student

(Stu_id Number(5),

Class_id  Number(5),

Stu_Name Varchar2(8),

Stu_Memo varchar2(200)) on Commit Preserve Rows ;

2) 事务级临时表是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION的时候,事务级的临时表也会被自动截断)。事务级临时表的创建方法:

Create Global Temporary Table Table_Name

(Col1 Type1,Col2 Type2...) On Commit Delete Rows;

举例:

create global temporary table Classes

(Class_id Number(5),

Class_Name Varchar2(8),

Class_Memo varchar2(200)) on Commit delete Rows ;

3)  两中类型临时表的区别

会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断

 

4)什么时候使用临时表

 

1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中

2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。

<think>好的,我现在需要帮助用户找到Oracle 11g中临时表使用方法和示例。首先,我要回顾用户提供的引用内容,看看是否有相关的信息。用户提供了五个引用,其中引用4提到了Oracle中的临时表,特别是全局临时表的两种类型:事务级和会话级。引用5提到了临时表空间的清理,但可能不直接涉及使用方法。其他引用主要讨论临时表空间的管理,如创建和维护,但用户的问题是关于临时表本身的使用,所以需要更关注引用4的内容。 接下来,我需要确保回答的结构清晰,按照用户的要求分步骤说明,并给出示例代码。根据引用4,临时表分为事务级和会话级,创建时使用GLOBAL TEMPORARY TABLE,并且数据在会话或事务结束后自动清除。因此,我应该详细说明这两种类型的区别,创建语法,使用步骤,以及示例代码。同时,用户可能需要知道如何查询临时表的数据,以及注意事项,比如DDL操作的影响和索引的创建。 然后,要检查是否有其他引用相关内容。比如引用2和3提到了临时表空间的管理,但用户的问题是关于临时表使用,所以这些可能作为补充信息,比如临时表空间与临时表的关系,但可能不是主要重点。引用5中的清理命令可能适用于临时表空间,而不是临时表本身,因为临时表的数据是自动管理的。 需要注意的是,用户特别询问的是Oracle 11g,因此要确保提供的信息适用于该版本。引用4提到的全局临时表在11g中应该适用,同时引用5提到的收缩临时表空间的方法也是11g的特性,但可能不属于用户当前的问题范围。 最后,生成相关问题,确保问题与临时表使用、管理、优化等相关,基于引用内容中的信息,比如类型区别、数据存储位置、自动清理机制、性能优化等。</think>以下为Oracle 11g中临时表使用方法的详细说明(基于提供的引用内容): ### 一、Oracle 11g临时表核心特性 Oracle临时表是存储会话或事务级临时数据的特殊对象,数据在会话结束或事务提交后自动删除[^4]。分为两种类型: 1. **事务级临时表**:数据在事务提交后自动清除 2. **会话级临时表**:数据在会话终止后自动清除 ### 二、临时表创建语法 ```sql -- 创建事务级临时表 CREATE GLOBAL TEMPORARY TABLE temp_transaction ( id NUMBER PRIMARY KEY, data VARCHAR2(50) ) ON COMMIT DELETE ROWS; -- 事务级标识 -- 创建会话级临时表 CREATE GLOBAL TEMPORARY TABLE temp_session ( emp_id NUMBER, emp_name VARCHAR2(100) ) ON COMMIT PRESERVE ROWS; -- 会话级标识 ``` ### 三、使用步骤说明 1. **创建临时表**(需有CREATE TABLE权限) 2. **插入数据**(仅对当前会话可见): ```sql INSERT INTO temp_session VALUES(1, 'John'); ``` 3. **查询数据**: ```sql SELECT * FROM temp_session WHERE emp_id = 1; ``` 4. **自动清理**: - 事务级:执行COMMIT后数据消失 - 会话级:断开数据库连接后数据消失 ### 四、典型应用场景示例 **场景:** 报表生成时的中间数据存储 ```sql -- 创建会话级临时表 CREATE GLOBAL TEMPORARY TABLE report_temp ( dept_id NUMBER, total_salary NUMBER ) ON COMMIT PRESERVE ROWS; -- 存储中间计算结果 INSERT INTO report_temp SELECT department_id, SUM(salary) FROM employees GROUP BY department_id; -- 生成最终报表 SELECT d.department_name, r.total_salary FROM departments d JOIN report_temp r ON d.department_id = r.dept_id; ``` ### 五、注意事项 1. **表结构持久化**:临时表的定义永久存储在数据字典中 2. **索引支持**:可创建索引加速查询 ```sql CREATE INDEX idx_temp ON temp_session(emp_id); ``` 3. **存储位置**:数据存储在临时表空间中(参见引用[2][3]) 4. **性能优化**:适合处理大量中间数据,减少重做日志生成[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值