您的位置:程序门 -> db2 -> 数据库开发



嵌套存储过程的返回值


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


嵌套存储过程的返回值
发表于:2007-10-26 15:06:44 楼主
  一段sql分几个小sp来做、目前的思路是嵌套sp
  1.各小sp返回的是数据字段相同的数据集
  2.客户端调用的外层sp返回的是各内层sp数据集的连接
    当初的sql里是用   union   all   连接的

问题:如何取得各内层sp的返回结果集合、并连结起来返回给客户端???

内层sp:a
create   procedure   stp_selecta(....)
              specific   selectasp
language   sql
dynamic   result   sets   1
p1:   begin
          declare   sqlstmt   varchar(1024);
          declare   c1   cursor   with   return   to   caller   for   s1;

          set   sqlstmt   =   '.....';

        prepare   s1   from   sqlstmt;
        open   c1;
end   p1;

内层sp:b
create   procedure   stp_selectb(....)
              specific   selectbsp
language   sql
dynamic   result   sets   1
p1:   begin
          declare   sqlstmt   varchar(1024);
          declare   c2   cursor   with   return   to   caller   for   s2;

          set   sqlstmt   =   '.....';

        prepare   s2   from   sqlstmt;
        open   c2;
end   p1;

外层sp:
create   procedure   stp_selectall(....)
              specific   selectallsp
language   sql
dynamic   result   sets   1
p1:   begin
              declare   loc1   result_set_locator   varying;
              declare   loc2   result_set_locator   varying;

              if   条件a   then
              call   stp_selecta(...);
              associate   result   set   locator(loc1)   with   procedure   stp_selecta;
              allocate   cur1   cursor   for   result   set   loc1;
              ---------
              要取得stp_selecta的结果集
              如果上面逻辑正确的话、这里怎么写?   fetch...?
              ---------
              end   if;

              if   条件b   then
              call   stp_selectb(...);
              associate   result   set   locator(loc2)   with   procedure   stp_selectb;
              allocate   cur2   cursor   for   result   set   loc2;
              ---------
              如上
              ---------
              end   if;

              ???????
            最后这里怎么组织啊、让客户端得到结合后的数据集合、不能open了、fetch吗?     还是有别的思路、
            望指教、不胜感激
end   p1;
发表于:2007-10-26 16:43:041楼 得分:0
在allocate后面你使用open、fetch等语句后有什么结果?要将数据返回给客户端,游标必须打开。
设置dynamic   result   sets   2可以将两个游标都返回,但这两个合并成一个结果还不知道用什么语句。
发表于:2007-10-26 16:54:192楼 得分:0
试试:associate   result   set   locator(loc1)   with   procedure   stp_selecta;  
associate   result   set   locator(loc1)   with   procedure   stp_selectb;  
或者
associate   result   set   locator(loc1)   with   procedure   stp_selecta,stp_selectb;  
是否可以合并两个存储过程的结果到一个rs-locator-variable中?
发表于:2007-10-26 17:15:063楼 得分:0
不能open     是资料上写的
至于fetche     是我试了没有结果      
就是外层sp执行后返回不是dataset么
取dataset.table「0]   说不存在
没有用   shijubo   说的
associate   result   set   locator(loc1)   with   procedure   stp_selecta;  
associate   result   set   locator(loc1)   with   procedure   stp_selectb;
试过
现在想先用一个
...
associate   result   set   locator(loc1)   with   procedure   stp_selecta;  
allocate   cur1   cursor   for   result   set   loc1;
end   p1;

外层也取不到

两个问题  
1.结合的问题:       查阅了下不知道临时表能否解决、在试
2.外层传递给客户端、如shijubo说的   必须打开游标
    那就是给临时表定义个游标   ...for   select   *   from   temptable    
在摸索     感谢大家
发表于:2007-10-26 17:20:554楼 得分:0
用临时表有个还有个问题、
比如   stp_selecta   取得的   「金额]   列   是   decimal类型
而       stp_selectb   里这列的值因为数据表没有金额、用次数(integer)来填充
这时候临时表的   「金额]   列数据类型定义怎么办


快速检索

最新资讯
热门点击