db2 function 使用动态游标 如何跳出循环

CREATE FUNCTION "YNTJ"."GETHEALTHCOMMA"(mainId  varchar(40),subTableName  varchar(40),subId   varchar(40),   subString  varchar(2000),               &...显示全部
CREATE FUNCTION "YNTJ"."GETHEALTHCOMMA"
(
mainId  varchar(40),
subTableName  varchar(40),
subId   varchar(40),   
subString  varchar(2000),                                 
dd  VARCHAR(100),     
ddid VARCHAR(100)  
)
returns varchar(2000)
LANGUAGE SQL
SPECIFIC SQL110511145990134
begin
    DECLARE v_at_end INTEGER DEFAULT 0;--标识是否有数据
    declare Result varchar(2000);
    declare exesql varchar(500);
    declare  v_name varchar(30);  
    declare   v_errmsg varchar(300);  
  DECLARE refcursor STATEMENT;
    DECLARE c_result CURSOR FOR refcursor;  
   set exesql= 'select distinct(d.name) from ' || subTableName ||' s,'||dd||' d  where s.'||subId||' = ' || mainId ||' and s.'||subString||'=d.'||ddid;
    PREPARE refcursor FROM exesql;
  declare continue handler for not found--这行出错,  set  v_at_end=1;赋值失败,跳不出循环

   begin
       set  v_at_end=1;
   end;
       OPEN c_result;
    loop1: loop
    fetch c_result into v_name;
  if v_at_end=1 then
  leave loop1;
  end if;  
    set Result=v_name || ',' || Result;   
    end loop ;
    close c_result;
   set Result = trim(Result);
   set Result = substr(Result,1,length(Result)-1);
  Return  trim(Result);
end收起
参与3

查看其它 1 个回答limin19821的回答

limin19821limin19821系统工程师乐酷天
How about try

   DECLARE exit HANDLER FOR SQLSTATE '02000'

Not familiar with coding. Sorry.
huangdk 发表于 2011-7-19 10:39


说的不错
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, NOT FOUND, SQLWARNING
    BEGIN NOT ATOMIC
      -- Capture SQLCODE & SQLSTATE
      SELECT  SQLCODE, SQLSTATE
      INTO    hSqlcode, hSqlstate
      FROM    SYSIBM.SYSDUMMY1;

      -- Use the PoGenStatus variable to tell the procedure what type
      -- of error occurred
       CASE hSqlstate
          WHEN '02000' THEN  --row not found
            SET poGenStatus=5000;
            SET vCursorEnd = 1;
          WHEN '42724' THEN  --missing llsp
            SET poGenStatus = 3;
          ELSE
                  IF (hSqlCode < 0) THEN   
                          SET poGenStatus = hSqlCode;
                          SET vCursorEnd = 1;
                          END IF;
       END CASE;
     END;
IT分销/经销 · 2011-07-18
浏览1652

回答者

limin19821
系统工程师乐酷天
擅长领域: 数据库

limin19821 最近回答过的问题

回答状态

  • 发布时间:2011-07-18
  • 关注会员:1 人
  • 回答浏览:1652
  • X社区推广