五华区网站,好的网站你们会感谢我的,广州 网站建设 行价,WordPress与dz用户恭喜目录 背景问题复现问题原因解决方法 背景
用户在使用临时表的过程中#xff0c;执行commit提交命令之后#xff0c;临时表的数据被清空#xff0c;无法被接下来的存储过程复用。
问题复现
-----------------------------提交删除行-----------------------------
--创建临… 目录 背景问题复现问题原因解决方法 背景
用户在使用临时表的过程中执行commit提交命令之后临时表的数据被清空无法被接下来的存储过程复用。
问题复现
-----------------------------提交删除行-----------------------------
--创建临时表
CREATE GLOBAL TEMPORARY TABLE SYSDBA.temp_table
(
id VARCHAR(50),
name CHAR(10))
ON COMMIT DELETE ROWS STORAGE(ON TEMP);--插入数据
INSERT INTO SYSDBA.temp_table
VALUES(1,Tom);--查看数据
SELECT * FROM SYSDBA.temp_table;
--id name
--1 Tom --提交
COMMIT;--查看数据表中数据被清空
SELECT * FROM SYSDBA.temp_table;
--id name-----------------------------提交保留行-----------------------------
--创建临时表
create global temporary table SYSDBA.temp_table1
(id VARCHAR(50),name CHAR(10)
)on commit preserve rows
storage(initial 1, next 1, minextents 1, fillfactor 0)
;--插入数据
INSERT INTO SYSDBA.temp_table1
VALUES(1,Tom);--查看数据
SELECT * FROM SYSDBA.temp_table1;
--id name
--1 Tom --提交
COMMIT;--查看数据表中数据被清空
SELECT * FROM SYSDBA.temp_table1;
--id name
--1 Tom -----------新打开会话窗口
--查看数据表中数据被清空
SELECT * FROM SYSDBA.temp_table1;
--id name问题原因
达梦临时表有两种类型会话级的临时表和事务级的临时表。
ON COMMIT DELETE ROWS --事务级临时表 它是临时表的默认参数表示临时表中的数据仅在事务过程Transaction中有效当事务提交COMMIT后临时表的暂时段将被自动截断TRUNCATE。 但是临时表的结构以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后最好删除临时表否则数据库会残留很多临时表的表结构和元数据。
ON COMMIT PRESERVE ROWS --会话级临时表 它表示临时表的内容可以跨事务而存在不过当该会话结束时临时表的暂时段将随着会话的结束而被丢弃临时表中的数据自然也就随之丢弃。 但是临时表的结构以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后最好删除临时表否则数据库会残留很多临时表的表结构和元数据。
参考链接: 达梦数据库临时表介绍
解决方法
重建临时表为会话级临时表ON COMMIT PRESERVE ROWS。p.s.没有找到事务性临时表直接更改成会话型临时表的方法