临时表的使用

declare @count3 int,@count7 int,@count int,@countMore int;

select @count3=count(*) from Exam_QuesContent where DateDiff(d,addDate,getdate())<3 --最近三天
select @count7=count(*) from Exam_QuesContent where DateDiff(d,addDate,getdate())<7 --最近七天
select @count=count(*) from Exam_QuesContent where DateDiff(d,addDate,getdate())=0 --今天
select @countMore=count(*) from Exam_QuesContent --更久

if object_id('tempdb..#Tmp') is not null
Begin
    drop table #Tmp
End
create table #Tmp --创建临时表#Tmp
(
    ID int IDENTITY(1,1) NOT NULL, --创建列ID,并且每次新增一条记录就会加1
    Title  text,  --标题 
    BiaoShi varchar(50),--标示
    Error int     --ID字符串  
);
insert #Tmp(Title,BiaoShi,Error)values('今天','today',@count);
insert #Tmp(Title,BiaoShi,Error)values('最近三天','san',@count3);
insert #Tmp(Title,BiaoShi,Error)values('最近七天','qi',@count7);

insert #Tmp(Title,BiaoShi,Error)values('更久','more',@countMore);
select * from #Tmp;

 

转载于:https://www.cnblogs.com/hougelou/p/3357347.html

<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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值