当前位置: 代码迷 >> Oracle开发 >> 急 oracle 使用游标循环 将多个id拼接成字符串 如次代码 调用function的时候 一直在执行,但没有显示结果 跪求答案
  详细解决方案

急 oracle 使用游标循环 将多个id拼接成字符串 如次代码 调用function的时候 一直在执行,但没有显示结果 跪求答案

热度:48   发布时间:2016-04-24 06:49:12.0
急急! oracle 使用游标循环 将多个id拼接成字符串 如下代码 调用function的时候 一直在执行,但没有显示结果 跪求答案

--同天、同机构、同类型 扣分 只扣一条
create or replace function get_lzkh_kfjfxq(sqls in varchar2,kfrq in varchar2)
RETURN varchar2 IS
Result varchar2(4000);--返回值
idstr varchar2(80);--接受游标遍历的id值的变量
--创建游标(只包含id的游标)
cursor cur_lzkh is
  select id
  from lzkh_kfjfxq
  where kfjfrq||jgm||kfjfms= sqls and kfjfrq=kfrq;--参数sqls 是 kfjfrq||jgm||kfjfms
begin
  Result :='';
  open cur_lzkh;
  --idstr赋值
  fetch cur_lzkh into idstr;
  --遍历游标
  WHILE cur_lzkh%FOUND LOOP
  --拼接id
  Result := Result || idstr || ',';
  end loop;
  --去掉最后一个逗号(,)
  Result :=substr(Result,1,LENGTH(Result)-1);
  close cur_lzkh;
 RETURN (Result);
end get_lzkh_kfjfxq;

------解决方案--------------------
引用:

--同天、同机构、同类型 扣分 只扣一条
create or replace function get_lzkh_kfjfxq(sqls in varchar2,kfrq in varchar2)
RETURN varchar2 IS
Result varchar2(4000);--返回值
idstr varchar2(80);--接受游标遍历的id值的变量
--创建游标(只包含id的游标)
cursor cur_lzkh is
  select id
  from lzkh_kfjfxq
  where kfjfrq
------解决方案--------------------
jgm
------解决方案--------------------
kfjfms= sqls and kfjfrq=kfrq;--参数sqls 是 kfjfrq
------解决方案--------------------
jgm
------解决方案--------------------
kfjfms
begin
  Result :='';
  open cur_lzkh;
  --idstr赋值
  fetch cur_lzkh into idstr;
  --遍历游标
  WHILE cur_lzkh%FOUND LOOP
  --拼接id
  Result := Result 
------解决方案--------------------
 idstr 
------解决方案--------------------
 ',';
  end loop;
  --去掉最后一个逗号(,)
  Result :=substr(Result,1,LENGTH(Result)-1);
  close cur_lzkh;
 RETURN (Result);
end get_lzkh_kfjfxq;

将循环处更改一下:
    LOOP
      fetch cur_lzkh into idstr;
      EXIT WHEN cur_lzkh%NOTFOUND;
      Result := Result 
------解决方案--------------------
 idstr 
------解决方案--------------------
 ',';
    END LOOP;
------解决方案--------------------
你这很多错了,改良下
create or replace function get_lzkh_kfjfxq(sqls in varchar2,
                                           kfrq in varchar2)
  RETURN varchar2 is
  Result varchar2(4000);
  cursor cur_lzkh is
    select id
      from lzkh_kfjfxq
     where kfjfrq 
------解决方案--------------------
 jgm 
------解决方案--------------------
 kfjfms = sqls
       and kfjfrq = kfrq;
  idstr cur_lzkh%rowtype;   
begin
  Result := '';
  open cur_lzkh;
  loop
    fetch cur_lzkh into idstr;
    exit when cur_lzkh%notfound;
    Result := Result 
------解决方案--------------------
 idstr.id 
------解决方案--------------------
 ',';
  end loop;
  Result := substr(Result, 1, LENGTH(Result) - 1);
  close cur_lzkh;
  RETURN(Result);
end get_lzkh_kfjfxq;
另外 我觉得wm_concat函数就能实现你的要求了吧
  相关解决方案