hur.cn - 华软网

 热门搜索

ASA数据库存储过程的问题!!!

  作者:未知    来源:网络    更新时间:2018/2/6
我用sql写了一个存储过程,现在我想把数据库换成ASA数据库,我在建存储过程的时候是直接将sql中的存储过程代码复制到ASA中来建存储过程,但是提示当中有错误,代码是这样的:
CREATE PROCEDURE proc_xssjkc_tj
   @data varchar(20) 
AS
begin
   declare @bjkcdm char(20),@xh char(14),@kcfs numeric(4,1),@count int
   DECLARE xssjkcfs CURSOR FOR 
   SELECT xh,view_xssjkcb.bjkcdm ,kcfs
   FROM view_xssjkcb,bjkcb
   WHERE view_xssjkcb.bjkcdm=bjkcb.bjkcdm and bdm=@data
   OPEN xssjkcfs
   FETCH NEXT FROM xssjkcfs INTO @xh,@bjkcdm,@kcfs 
   WHILE @@FETCH_STATUS = 0
   BEGIN
      select @count=count(*) from xssjkcb where xh=@xh and bjkcdm=@bjkcdm
      if @count>0 
         update xssjkcb set kcfs=@kcfs where xh=@xh and bjkcdm=@bjkcdm
      else
         insert into xssjkcb (xh,bjkcdm,kcfs) values(@xh,@bjkcdm,@kcfs)      
      FETCH NEXT FROM xssjkcfs INTO @xh,@bjkcdm,@kcfs    
   END
   CLOSE xssjkcfs
   DEALLOCATE xssjkcfs
end
GO
出错的是:FETCH NEXT FROM xssjkcfs INTO @xh,@bjkcdm,@kcfs 这一句
这个存储过程改成ASA该怎么写?请大家帮帮忙,我以前没有用过ASA
------华软网友回答------
Drop function update_cdm_ledger;
create function update_cdm_ledger (in @filename char(128))
returns integer
on exception resume
begin
declare csql char(254);
declare n integer;
set csql = 'LOAD TABLE t_cdm_ledger_tmp FROM ''' +@filename+''' FORMAT ASCII DELIMITED BY ''|'' DEFAULTS ON';
execute immediate csql;
if sqlcode =-1 then 
return -1;
end if ;
FOR crsr AS curs CURSOR FOR 
SELECT acc,svt_no,bal,open_date,bgn_int_date,cls_date,open_inst,substr(flag,3,1) zt1,cstm_name FROM t_cdm_ledger_tmp
DO
select count(*) into n from t_cdm_ledger where zh = acc;
if n = 0 then 
INSERT INTO t_cdm_ledger(zh,inst_no,hm,cz,ye,qxrq,khrq,xhrq,zt )  
VALUES ( acc , open_inst , cstm_name ,svt_no , bal , bgn_int_date,open_date , cls_date , zt1)  ;
  if sqlcode =-1 then 
return -1;
end if ;
else
update t_cdm_ledger set hm =cstm_name ,ye =  bal ,zt = zt1 where zh = acc ;
if sqlcode =-1 then 
return -1;
end if ;
end if ;
END FOR;
commit;
return 0;
end;      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。