首页 > 学技术 > 技术网文 > DB2 > 正文

[精彩] 关于db2存储过程中返回结果集的问题?(再次寻找高手)


来源 chinaunix.net 酷勤网整理

我有一个比较复杂的查询,需要将许多表中的记录进行重新组合分析,并返回结果集,所以准备用过程来实现 

我设想在编写此存储过程时,须创建一个临时表,然后将组合分析结果存储在此表中,最后通过该临时表返回结果集 

但是在存储过程中定义游标的declare 语句必须在别的语句的前面,故我不知怎么办。 

请问高手,如何做,或者还有别的好方法吗?

注:此过程可能会有多人同时使用



 永远是新手 回复于:2003-06-17 14:30:09

没有太明白你的意思。如果你一开始就定义返回结果集的游标那也没有问题,只要在最后返回时OPEN一下那个游标就行了;如果你不想一开始定义游标,只想在最后定义,那把游标定义和打开这部分用begin 和end;包含起来。
   多人使用也没有问题啊,因为临时表是session级的,每个人用到的都不一样,我们这里一般这样定义临时表:
declare global temporary table t1( f1 char(1)....)
not logged with replace ;好象就是有无数人用也没有关系啊。


 bbniu 回复于:2003-06-18 09:10:24

谢谢楼上的提示
我有以下的源代码:

CREATE PROCEDURE PR_TEST_CURSOR ( )
    RESULT SETS 1
    LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存储过程 
------------------------------------------------------------------------
P1: BEGIN 
    DECLARE GLOBAL TEMPORARY TABLE T_GJSC
  (
      F_GYSBH CHAR(6),
      F_WLID CHAR(6)
    )
       ON COMMIT DELETE ROWS
      NOT LOGGED
IN TEMPSPACE2
          ;
          INSERT INTO SESSION.T_GJSC VALUES ('0','0');
P2:BEGIN 
DECLARE C1 CURSOR WITH RETURN FOR SELECT F_GYSBH FROM SESSION.T_GJSC; 

OPEN C1;
 
END P2; 

END P1            

编译,执行都成功,但是临时表没有删除,造成一个登录进程只能一次使用此过程,请问如何解决,谢谢!


 bbniu 回复于:2003-06-23 14:27:10

每次总是问一半就没人回答了,是不是我问的太简单了,大家都不愿回答


 永远是新手 回复于:2003-06-23 17:49:57

你按照我的方式建立临时表
DECLARE GLOBAL TEMPORARY TABLE T_GJSC 

F_GYSBH CHAR(6), 
F_WLID CHAR(6) 

 NOT LOGGED  with replace 

试试


 bbniu 回复于:2003-06-24 09:02:48

非常感谢楼上的




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=93466
转载请注明作者名及原文出处



收藏本页到: