软件开发数据库

求助大神,这个db2存储过程有什么问题,错误出在哪里?

SET CURRENT SCHEMA = PAS;

SET CURRENT PATH = SYSIBM,SYSFUN,SYSPROC,SYSIBMADM,PAS;

CREATE OR REPLACE PROCEDURE PAS.SP_PASTRAN_LOAD (

    IN I_TJRQ    INTEGER,

    OUT I_ERR_NO    INTEGER )

  SPECIFIC SQL141030210057900

  LANGUAGE SQL

  NOT DETERMINISTIC

  EXTERNAL ACTION

  MODIFIES SQL DATA

  CALLED ON NULL INPUT

  INHERIT SPECIAL REGISTERS

  OLD SAVEPOINT LEVEL

--支持语言

/*------------------------------------------------------------------

存储过程:数据加载入口程序

-------------------------------------------------------------------*/

begin  

    --临时变量,出错变量

    declare sqlcode      integer default 0; --错误代码

    declare i_at_end     integer default 0; --查询结果是否找到变量

    declare i_code       integer default 0; --错误代号

    declare v_err_msg    varchar(1024);     --错误描述

        --声明变量

    declare v_proc_name   varchar(50)   default 'SP_PASTRAN_LOAD'; --程序名称

    declare v_sql         varchar(4000) default '';--动态sql

    declare v_proc_sjms   varchar(100); --日志描述

    declare i_stjrq       integer;      --统计日期前一天变量

    declare v_fileroot    varchar(500); --目录 以结尾

    declare v_path        varchar(500); --完整路径

    declare v_filename    varchar(100);  --文件名

    declare v_extname     varchar(10);  --扩展名

    declare v_tablename   varchar(30);  --接口表名

    declare v_datetime    varchar(255); --系统时间

    declare v_sys_status  varchar(255); --系统状态

    declare v_fileallname varchar(255); --完整路径

    declare cur_jkwj cursor with hold for  

                                        select rtrim(jkbmc) as bm,lower(rtrim(wjmc)) as wjmc ,lower(rtrim(wjlx)) as wjlx

                                        from pas.xtb_sjwj

                                        where  qybz='0';

   

   

    declare exit handler for sqlexception

    begin

        set i_code=sqlcode;

        set i_err_no=1;

        call SP_PASSYS_ERRHANDLE(v_proc_name,i_code);  

        commit;

    end;

   

    -- 声明查询结果未找到或到达末尾

    declare continue handler for not found

    begin

        set i_at_end = 1;

    end;

   

    --程序开始

    set i_err_no = 0;

    select rtrim(csz) into v_fileroot from pas.xtb_xtcs where upper(csmc)='DATA_FOLDER' ;    --取接口文件根目录

   -- select rtrim(csz) into v_datetime from pas.xtb_xtcs where upper(csmc)='SYS_DATE';        --取接口文件时间文件夹名

    set v_datetime=rtrim(char(i_tjrq));--改成由外部传入的日期

    select rtrim(csz) into v_sys_status from pas.xtb_xtcs where upper(csmc)='SYS_STATUS';    --判断系统状态

    set v_path=v_fileroot||v_datetime||'/';

    set v_proc_sjms=rtrim(v_datetime)||'数据文件加载到接口表开始';

    call SP_PASSYS_XTRZ ('0',v_proc_name,v_proc_sjms);

    if v_sys_status='2' then

        --判断是否存在ok.dat文件如果有则开始执行文件加载,否则退出程序

        if  F_IS_EXISTS_TABLE('JKSJ_OK') =0 then

            set  v_sql='create  table pas.jksj_ok (tjrq integer)';   

            prepare s1 from v_sql;

            execute s1;

        end if;

        /*

        set v_fileallname=v_path||'ok.TXT';

        call SP_PASTRAN_LOADFILE(v_fileallname,'JKSJ_OK',i_err_no);

        set i_code=sqlcode;

        if i_err_no=2 then

            begin

                 set v_proc_sjms='接口文件不齐,本次跑批退出!';

                 call SP_PASSYS_XTRZ('1',v_proc_name,v_proc_sjms);

                 return;

            end;

        end if;

        */

        --开始执行加载文件

        open cur_jkwj;

        set i_at_end=0;

        fetch cur_jkwj into v_tablename,v_filename,v_extname;

            while i_at_end=0 do

               

                set v_fileallname=v_path||v_filename||v_extname;

                if upper(v_extname)='.IXF' then

                    call SP_PASTRAN_IMPORTFILE (v_fileallname,v_tablename,i_err_no);   --调用import加载程序

                else

                    call SP_PASTRAN_LOADFILE   (v_fileallname,v_tablename,i_err_no);   --调用load加载程序

                end if;

                set i_code=sqlcode;

                if i_err_no=1 then

                    begin

                        set v_proc_sjms=v_fileallname||'数据导入至'||rtrim(char(v_tablename))||'表出现错误,请检查!';

                        call SP_PASSYS_XTRZ('2',v_proc_name,v_proc_sjms);

                        return;

                    end;

                end if;

                set i_at_end=0;        

                fetch cur_jkwj into v_tablename,v_filename,v_extname;        

            end while;

            close cur_jkwj;

    end if;

    if v_sys_status='1' then

        begin

            set i_err_no = 1;

            call SP_PASSYS_XTRZ ('2',v_proc_name,'系统状态出错无法加载!');

            return;

        end;

    end if;

    if v_sys_status='0' then

        begin

            call SP_PASSYS_XTRZ ('1',v_proc_name,'系统状态不在运行中,无法加载!');

            return;

        end;

    end if;

    set v_proc_sjms=rtrim(v_datetime)||'数据文件加载到接口表结束';

    call SP_PASSYS_XTRZ ('0',v_proc_name,v_proc_sjms);   

   

    commit;

end;

参与1

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

stoner
系统运维工程师广州天维信息技术

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2016-07-25
  • 关注会员:1 人
  • 问题浏览:1033
  • X社区推广