我有一个比较复杂的查询,需要将许多表中的记录进行重新组合分析,并返回结果集,所以准备用过程来实现
我设想在编写此存储过程时,须创建一个临时表,然后将组合分析结果存储在此表中,最后通过该临时表返回结果集
但是在存储过程中定义游标的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
非常感谢楼上的
|