WEB开发网
开发学院数据库DB2 DB2存储过程开发最佳实践 阅读

DB2存储过程开发最佳实践

 2007-09-04 16:22:47 来源:WEB开发网   
核心提示: 清单10:创建有两个字段的临时表DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP2( IDINTEGER default 3, NAMECHAR(30))--WITH REPLACENOT LOGGED;--IN USER_TEMP_01;此语句创建了

清单10:创建有两个字段的临时表

DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP2
  (
    ID  INTEGER default 3,
    NAME CHAR(30)    
  )
  --WITH REPLACE
  NOT LOGGED;
  --IN USER_TEMP_01;

此语句创建了一个有两个字段的临时表。

理论上临时表是不需要显示DROP的,因为它是基于会话的,当临时表基于的连接关闭的时候,临时表也就不存在了。但是在实际开发中会有一些情况需要我们对临时表加以注意。

一种情况就是被调用的存储过程的返回值是一个基于临时表的结果集。当存储过程执行完毕的时候,临时表并不会消失,因为返回的结果集相当于一个指针,指向临时表所在的内存地址,此时临时表是不会被DROP掉的。这种情况下,既不能在存储过程中删除这个临时表,也不应该由客户应用显示的删除临时表,这就容易出现一些问题。下面我们通过一个例子来说明这个问题。

下面示例代码是返回临时表的存储过程(get_temp_table):

清单11:返回临时表的存储过程

  -----------------------------------------------------
  -- TEMPORARY TABLE & CURSOR declaration
  -----------------------------------------------------
  DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP
  (
    ID     INTEGER,
    NAME   CHAR(30)    
  )
  --WITH REPLACE
  NOT LOGGED;
 
  P2: BEGIN
  
  DECLARE R_CRSR CURSOR WITH RETURN TO CLIENT FOR
  SELECT * FROM SESSION.TEMP
  FOR READ ONLY;
  
  INSERT INTO SESSION.TEMP VALUES(1,piName);
 
  OPEN R_CRSR;
   
  END P2;

上一页  5 6 7 8 9 10 

Tags:DB 存储 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接