大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说DB2 ORACLE 临时表创建「终于解决」,希望您对编程的造诣更进一步.
一、临时表
临时表(TEMPORARY TABLE)通常应用在需要定义临时集合的场合。但是,在大部分需要临时集合的时候,我们根本就不需要定义临时表。当我们在一条SQL语句中只使用一次临时集合时,我们可以使用嵌套表表达式来定义临时集合;当我们在一条SQL语句中需要多次使用同一临时集合时,我们可以使用公共表表达式;只有当我们在一个工作单元中的多条SQL语句中使用同一临时集合时,我们才需要定义临时表。
方法1:
DECLARE GLOBAL TEMPORARY TABLE SESSION.EMP
(
NAME VARCHAR(10),—姓名
DEPT SMALLINT,—部门
SALARY DEC(7,2)—工资
)
ON COMMIT DELETE ROWS;
方法2:
DECLARE GLOBAL TEMPORARY TABLE session.emp
LIKE staff INCLUDING COLUMN DEFAULTS
WITH REPLACE
ON COMMIT PRESERVE ROWS;
方法3:
DECLARE GLOBAL TEMPORARY TABLE session.emp AS
(
SELECT * FROM staff WHERE <condition>
)
DEFINITION ONLY
WITH REPLACE;
方法4:
DECLARE GLOBAL TEMPORARY TABLE session.emp ( NAME VARCHAR(10),---姓名 DEPT SMALLINT,---部门 SALARY DEC(7,2)---工资 ) ON COMMIT PRESERVE ROWS NOT LOGGED WITH REPLACE;
代码100分
二、全局声明式临时表
ON COMMIT PRESERVE ROWS定义声明式全局临时表 定义声明式全局临时表的每个会话拥有自己的独特的临时表描述。当会话终止时,表行和临时表描述均会被删除。 有如下选项,可控制commit后临时表的状态:
ON COMMIT DELETE ROWS:在执行 COMMIT 操作时,如果表上没有打开 WITH HOLD 游标,就删除表中的所有行。这是默认设置。
ON COMMIT PRESERVE ROWS:在执行 COMMIT语句指定所创建的临时表是会话级临时表,当我们断开连接或手动执行DELETE或TRUNCATE之前,临时表中的数据一直存在,并且只有当前会话可以看到,其他会话看不到。
ON ROLLBACK DELETE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,语句指定所创建的临时表是事务级临时表,当COMMIT或ROLLBACK之前,这些数据一直存在,当事务提交之后,表中数据自动清除。这是默认设置。
ON ROLLBACK PRESERVE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,保留表中的所有行。
delete rows用于事务相关,也就在事务结束后truncate data in the temporary table
with replace 指在程序结束后自动删除该临时表
as 指字段从另外一个表来的意思
definition only 指创建表的时候不同时进行数据插入。关键字就是指“只定义无数据”只创建表
1.在建表语句中使用NOT LOGGED INITIALLY,只是在建表事务中不记日记,并不能关闭这张表的日志。2.如果需要不记录事务日志,需要在每个事务的开头使用 db2 alter table dbname activate NOT LOGGED INITIALLY 然后做commit.这里的不记日志操作,仅仅在同一个事务内有效,也就是说,这个事务结束(发出了commit命令)之后,后续操作会重新记录日志3.可以使用NOT LOGGED INITIALLY 做清空表的操作。 用法: alter table nolog_tab activate not logged initially with empty table commit
preserve rows表示在会话结束后清除临时表的数据
前者在事务提交后数据就已经清除了.
后者在会话中止时或者导常退出时数据都会被清除掉
ORACLE——临时表
CREATE GLOBAL TEMPORARY TABLE session.emp (
NAME VARCHAR(10),—姓名
DEPT SMALLINT,—部门
SALARY DEC(7,2)—工资
)
ON COMMIT PRESERVE ROWS;
创建索引:
DB2:
CREATE INDEX idxName ON tabName (cols) COLLECT STATISTICS
ORACLE:
代码100分CREATE INDEX idxName ON tabName (cols)
定义了临时表后,我们可以像使用普通表一样使用临时表。临时表只对定义它的用户有效,不同用户可以在同一时间定义同名的临时表,他们之间互不影响。临时表的生命周期是SESSION,当SESSION关闭时,临时表将自动删除,这也是临时表的模式名只能为SESSION的原因。此外,我们还可以给临时表定义索引。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7634.html