create or replace procedure generateLouName(unuse in varchar2) is
  tf VARCHAR(50);
  zhmi VARCHAR(50);
   totazm varchar(5000);
begin 
  declare cursor curlzhz is select zm,tfqzh from t_lz_hz order by tfqzh;
  open curlzhz;
  FETCH NEXT FROM curlzhz INTO @zhmi,@tf;  WHILE (@@fetch_status=0)
   begin
         declare cursor cursyqnew is select l from t_fc_syq_new where substr(fh,1,12)=tf and l<>zhmi;
         totazm=totazm+tf;
         loop
          totazm=totazm','+l;
         end loop;
         update t_lz_hz set zm=totazm where tfqzh=tf;
         commit;
         totalzm='';
         close cursyqnew;
  end;
  close curlzhz;
end generateLouName;PROCEDURE DB_SJCJ.GENERATELOUNAME 编译错误错误:PLS-00103: 出现符号 "FETCH"在需要下列之一时:
        begin function package
          pragma procedure subtype type use <an identifier>
          <a double-quoted delimited-identifier> form current cursor
行:8
文本:FETCH NEXT FROM curlzhz INTO @zhmi,@tf;
出现这个错误怎么办?

解决方案 »

  1.   

    ---这个语句应该是有问题的,检查
    loop
              totazm=totazm','+l;
             end loop;
      

  2.   


    也不行……
    PROCEDURE DB_SJCJ.GENERATELOUNAME 编译错误错误:PLS-00103: 出现符号 "FETCH"在需要下列之一时:
            begin function package
              pragma procedure subtype type use <an identifier>
              <a double-quoted delimited-identifier> form current cursor
    行:8
    文本:FETCH NEXT FROM curlzhz INTO @zhmi,@tf;
      

  3.   

    几个问题:
    1.楼主写的是Oracle的语法还是SQLServer的语法?
    2.如果是Oracle的话,下面几处是不对的:
    (1)totazm=totazm+tf --> 变量赋值应该用 :=,而不是=;字符串不能用+做拼串,应该用||,所以这句应该是 totazm := totazm || tf 
    (2)FETCH curlzhz INTO @zhmi, @totazm; -->带@是SQLServer的语法,在ORACLE里INTO的时候,不需要加@
    (3) FETCH next FROM --> 这个Next也是SQLServer的用法。