CREATE PROCEDURE "loan".getpayschedule(dat date)
returning varchar(255);
define returnstr varchar(20);
define v_duebillno varchar(20);--借据号
define v_maxcurrentno INTEGER;--最大期次
define v_duebno varchar(20);
define v_sq INTEGER;
define v_paydate varchar(20);
define v_maturedate varchar(10);
define count1 int;
define v_gitid int;--自动id
define v_currentnosc int;--提前还款上一次期次
define v_gitid1 int;
define sql_err,isam_err int;--异常处理
SET DEBUG FILE TO "gittestcom.txt";
let sql_err = 0;
TRACE ON;
begin
on exception set sql_err
delete from Acc_PayScheduleTmp;
delete from acc_payschedule;
trace "sql_err--->"||sql_err;
return "0";
end exception with resume ;
delete from Acc_PayScheduleTmp;
delete from acc_payschedule;
--从核心中间表导入所需数据岛临时表
-- insert into Acc_PayScheduleTmp select ap.*,TO_CHAR(today,'%Y%m%d')||seqhkjh.NEXTVAL from Acc_PaySchedule1 ap,loanduebill ld where ap.duebillno=ld.duebillno;
insert into Acc_PayScheduleTmp select contractno,duebillno,currentno,maturedate,currentsum,currentinterest,currentnormalinterest,currentoverdueinterest,currentoffsheetinterest,payoption,paydate,paysum,payinterest,currency,hexinappid,TO_CHAR(today,'%m%d')||seqhkjh.NEXTVAL from Acc_PaySchedule1 where duebillno in('000001000096011001','000001000167011001');
foreach select duebillno into v_duebillno from Acc_PayScheduleTmp
--开始轮循单条借据
let count1=0;
foreach select duebillno,currentno,paydate,maturedate,gitid into v_duebno,v_sq,v_paydate,v_maturedate,v_gitid from Acc_PayScheduleTmp where duebillno=v_duebillno
if(v_sq==2) then--提前还款从2开始
let count1=count1+1;
if(count1==2) then --如果第二次提前还款跟新状态
select max(currentno) into v_maxcurrentno from Acc_PayScheduleTmp where duebillno=v_duebno and currentno>=2 and gitid<v_gitid;
详细解决方案
一段存储过程,请大家伙儿帮忙优化
热度:1934 发布时间:2013-02-26 00:00:00.0