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;