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;
出现这个错误怎么办?
loop
totazm=totazm','+l;
end loop;
也不行……
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.楼主写的是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的用法。