DROP PROCEDURE ADMINISTRATOR.SP_TEST (INTEGER, CHARACTER ());

CREATE PROCEDURE administrator.sp_test(P1 INT, P2 CHAR(20))
DYNAMIC RESULT SETS 1
MODIFIES SQL DATA
LANGUAGE SQL
BEGIN
   DECLARE v_sqlstmt VARCHAR(8000);
   DECLARE CUR01 CURSOR WITH RETURN FOR SQL1;
   DECLARE GLOBAL TEMPORARY TABLE TT1(C1 INT, C2 CHAR(20)) WITH REPLACE;
  
   INSERT INTO SESSION.TT1 VALUES(P1, P2);
  
   set v_sqlstmt = 'SELECT * FROM SESSION.TT1 ';
   PREPARE SQL1 FROM v_sqlstmt;
   
   OPEN CUR01;  
  
END

;

--CALL administrator.SP_TEST(10,'123')

注意:

1、临时表的使用必须有临时表空间

命令: CREATE USER TEMPORARY TABLESPACE user_temp;

2、临时表只存在当前会话,如在当前会话中连续调用过程会出现临时表已经存在的问题, WITH  REPLACE的使用可以避免这样的情况,相当于Sql Server 中,

if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##TEMP_TBL')) ,可以存在删除,不存在声明。
3、临时表声明例:   DECLARE GLOBAL TEMPORARY TABLE TT1(C1 INT, C2 CHAR(20))  ON COMMIT PRESERVE ROWS;

定义声明式全局临时表的每个会话拥有自己的独特的临时表描述。当会话终止时,表行和临时表描述均会被删除。

有如下选项,可控制commit后临时表的状态:

ON COMMIT DELETE ROWS:在执行 COMMIT 操作时,如果表上没有打开 WITH HOLD 游标,就删除表中的所有行。这是默认设置。

ON COMMIT PRESERVE ROWS:在执行 COMMIT 操作时,保留表中的所有行。

ON ROLLBACK DELETE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,如果已经修改了表数据,就删除表中的所有行。这是默认设置。

ON ROLLBACK PRESERVE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,保留表中的所有行。

delete rows用于事务相关,也就在事务结束后truncate data in the temporary table.

preserve rows表示在会话结束后清除临时表的数据

前者在事务提交后数据就已经清除了.

后者在会话中止时或者导常退出时数据都会被清除掉.

db2中临时表在存储过程中的使用的更多相关文章

  1. oracle数据库中函数和存储过程中的区别

    一.函数必须有返回值,过程没有返回值: 二.函数可以单独执行,过程必须通过execute执行: 三.函数可以嵌入SQL中执行,过程不能. 可以将比较复杂的查询写成函数,然后在过程中调用.

  2. mysql中游标在存储过程中的具体使用方法

    昨天写的一个东东,分享下给大家. drop PROCEDURE  if exists sp_cleanUserData; CREATE  PROCEDURE `sp_cleanUserData`()  ...

  3. SQL SERVER中如何查找存储过程中一段代码

    select b.name ,a.text from syscomments a,sysobjects b where and object_id(b.name)=a.id and b.xtype i ...

  4. SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除临时表(drop table #tableName)吗?

    本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时 ...

  5. sqlserver 存储过程中使用临时表到底会不会导致重编译

    曾经在网络上看到过一种说法,SqlServer的存储过程中使用临时表,会导致重编译,以至于执行计划无法重用, 运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果 ...

  6. mysql 存储过程中使用游标中使用临时表可以替代数组效果

    mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在 ...

  7. Mysql存储过程(六)——存储过程中使用临时表

    Mysql 不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算. Mysql 临时表可以解决这个问题. 临时表 ...

  8. Sybase:存储过程中采用临时表存储统计数据

    Sybase:存储过程中采用临时表存储统计数据 作用 很有效的提升统计查询速度,对于数据量亿级.千万级多表之间关联查询,非常有效: 使用 --无需定义临时表,直接使用 --自动释放临时表 select ...

  9. sql server 存储过程中使用变量表,临时表的分析(续)

    最近,我有一朋友,对我说他的数据库中的很多存储过程,执行都是超时.让我替他看看是什么原因.我一看,原来他的存储过程中用了很多的临时表与变量表.于是我跟他说过犹不及. 在存储过程中使用临时表或变量表,使 ...

随机推荐

  1. FPGA前世今生(四)

    前几期我们一直介绍FPGA内部资源,今天我们将用最后的篇幅来介绍剩下的内部资源部分,结束我们FPGA的前世今生.之所以起名字为FPGA前世今生,其实就是介绍一下FPGA内部资源,前世的内部结构资源就不 ...

  2. Navicat for MySQL使用手记(下)--实现自动备份数据库

    五.备份和还原MySQL数据库 在数据库的管理中,备份和还原是必须做认真做的事情,如果疏忽或者做粗糙了,那么一旦数据库故障后果不堪设想,所以Navicat同样也有备份和还原的功能,相比较创建功能,其备 ...

  3. java多线程实现每隔500毫秒输出一个数字

    总结:主要是利用多线程来进行控制它输出的速度,而且这里要处理异常,这个异常我是这样处理的 1.首先写完一个for循环后,写这个:Thread.currnetThread().sleep(500); 然 ...

  4. java代码switch语句求分数等级

    总结:从键盘输入分数----- 如果在0到100内,则输出等级 小于0或者是大于100都不能输出,这里用if-else条件判断. package com.c2; import java.util.Sc ...

  5. AngularJS:过滤器

    ylbtech-AngularJS:过滤器 1.返回顶部 1. AngularJS 过滤器 过滤器可以使用一个管道字符(|)添加到表达式和指令中. AngularJS 过滤器 AngularJS 过滤 ...

  6. js中的class

    js中的class 类写法 class SuperClass { constructor(option) { this.a = option; } fn() { console.log(this.b) ...

  7. 第十二章 Java内存模型与线程(待续)

    ············

  8. Oracle11gR2--SEC_CASE_SENSITIVE_LOGON参数解析

    在Oracle的11g之前的版本中密码是不区分大小写的(使用双引号强制除外). 在Oracle的11g以及以后的版本中对此有所增强.从此密码有了大小写的区分. 这个大小写敏感特性是通过SEC_CASE ...

  9. Open XML 检索 EXCEL

    1.Excel 隐藏行判断 项目的 Hidden 属性不为 null,且 Hidden 属性的值为 True var itemList = ws.Descendants<Row>(). W ...

  10. 利用Sphinx编写文档

    利用Sphinx编写文档 1.Sphinx简介和使用理由 ================= Sphinx是一个用Python语言编写而成的文档编写工具.用Sphinx编写文档的时候,用户只需要编写符 ...