📄 政策判断存储过程.sql
字号:
CREATE OR REPLACE PROCEDURE judge_dkzc(
p_bh VARCHAR2,
p_dkcs NUMBER)AS
v_zcbz VARCHAR2(100); --政策标志
v_name VARCHAR2(10); --政策名称
v_val NUMBER(14,7); --参数值
v_qybz VARCHAR2(1); --启用标志(0禁用,1启用)
v_dkcs VARCHAR2(1); --贷款次数标志
v_hjbz VARCHAR2(12); --回缴标志
v_snhjbz VARCHAR2(12); --上年回缴标志
v_grzh VARCHAR2(9); --个人账号
v_pogrzh VARCHAR2(9); --配偶个人账号
v_slrq DATE; --受理日期
v_month NUMBER; --受理日期所在月份
v_start NUMBER; --开始交缴公积金的月份
v_bz VARCHAR2(20); --交缴公积金的标志
v_flag VARCHAR2(1); --公积金交足标志
v_yfgfk NUMBER(10,2); --已付购房款
v_fwzjz NUMBER(10,2); --房屋总价值
v_bl NUMBER(10,2); --付款比例
v_gdke NUMBER(20,5); --申请公积金的贷款额
v_gdknx NUMBER(3); --申请公积金的贷款年限
v_sex NUMBER(1); --申请人性别
v_birthday DATE; --申请人生日
v_age NUMBER; --申请人年龄
CURSOR c_dkzc IS --存放政策信息的游标
SELECT name,val,qybz,csbz
FROM dk_dkzc_parm;
BEGIN
v_zcbz:='';
v_grzh:=substr(p_bh,9,9);
OPEN c_dkzc;
LOOP
FETCH c_dkzc INTO v_name,v_val,v_qybz,v_dkcs;
EXIT WHEN c_dkzc%NOTFOUND;
IF v_name='lxjy' THEN --判断申请人是否交足公积金
IF v_qybz='0' OR v_dkcs!=p_dkcs THEN
v_zcbz := v_zcbz||'2';
ELSE
select slrq
into v_slrq
from dk_sd_info
where bh=p_bh;
v_month:=to_number(to_char(v_slrq,'mm'));
select hjbz,snhjbz
into v_hjbz,v_snhjbz
from gv_per_acct
where grzh=v_grzh;
if substr(v_hjbz,v_month,1)='0' then --如果本月还未缴,则从上个月往前数
v_start:= v_month -1;
else
v_start:= v_month;
end if;
if v_start <v_val then
v_bz := substr(v_snhjbz,v_start - v_val) + substr(v_hjbz,1,v_start);
else
v_bz := substr(v_hjbz,v_start - v_val + 1,v_val);
end if;
v_flag:='0';
v_start:=1;
while v_flag='0' and v_start<=v_val loop
if substr(v_bz,v_start,1)='0' then
v_flag:='1';
else
v_start:=v_start+1;
end if;
end loop;
if v_flag='1' then
v_zcbz := v_zcbz||'1';
else
v_zcbz := v_zcbz||'0';
end if;
END IF;
END IF;
IF v_name='yzbl' THEN --判断首付款占房价的比例是否达到最低值
IF v_qybz='0' OR v_dkcs!=p_dkcs THEN
v_zcbz := v_zcbz||'2';
ELSE
select yfgfk,fwzjz
into v_yfgfk,v_fwzjz
from dk_build_info
where bh=p_bh;
v_bl:=(v_yfgfk/v_fwzjz)*100;
if v_bl<v_val then
v_zcbz := v_zcbz||'1';
else
v_zcbz:=v_zcbz||'0';
end if;
END IF;
END IF;
IF v_name='polxjy' THEN --判断配偶是否交足公积金
IF v_qybz='0' OR v_dkcs!=p_dkcs THEN
v_zcbz := v_zcbz||'2';
ELSE
select pogrzh
into v_pogrzh
from dk_per_detail
where bh=p_bh;
if v_pogrzh is null then
v_zcbz:=v_zcbz||'2';
else
select hjbz,snhjbz
into v_hjbz,v_snhjbz
from gv_per_acct
where grzh=v_pogrzh;
if substr(v_hjbz,v_month,1)='0' then --如果本月还未缴,则从上个月往前数
v_start:= v_month -1;
else
v_start:= v_month;
end if;
if v_start <v_val then
v_bz := substr(v_snhjbz,v_start - v_val) + substr(v_hjbz,1,v_start);
else
v_bz := substr(v_hjbz,v_start - v_val + 1,v_val);
end if;
v_flag:='0';
v_start:=1;
while v_flag='0' and v_start<=v_val loop
if substr(v_bz,v_start,1)='0' then
v_flag:='1';
else
v_start:=v_start+1;
end if;
end loop;
if v_flag='1' then
v_zcbz := v_zcbz||'1';
else
v_zcbz := v_zcbz||'0';
end if;
end if;
END IF;
END IF;
IF v_name='zgdke' THEN --判断公积金贷款额是否超过最高公积金贷款限制,名称修改zgdke
IF v_qybz='0' OR v_dkcs!=p_dkcs THEN
v_zcbz := v_zcbz||'2';
ELSE
select g_dke
into v_gdke
from dk_sd_info
where bh=p_bh;
if v_gdke>v_val then
v_zcbz := v_zcbz||'1';
else
v_zcbz := v_zcbz||'0';
end if;
END IF;
END IF;
select g_dknx --从申贷表中读出申请公积金贷款年限
into v_gdknx
from dk_sd_info
where bh=p_bh;
IF v_name='zcnx' THEN --判断申请公积金贷款年限是否超过最长的贷款年限
IF v_qybz='0' OR v_dkcs!=p_dkcs THEN
v_zcbz := v_zcbz||'2';
ELSE
if v_gdknx>v_val then
v_zcbz := v_zcbz||'1';
else
v_zcbz := v_zcbz||'0';
end if;
END IF;
END IF;
select sex,birthday --从个人资料表中读出性别和生日
into v_sex,v_birthday
from dk_per_detail
where bh=p_bh;
v_age := to_number(to_char(v_slrq,'yyyy')) - to_number(to_char(v_birthday,'yyyy')); --计算年龄
IF v_name='mtxnl' THEN --判断贷款年限加贷款申请人年龄是否超过法定退休年龄(男)
IF v_qybz='0' OR v_dkcs!=p_dkcs OR v_sex='1' THEN
v_zcbz := v_zcbz||'2';
ELSE
if (v_gdknx+v_age)>v_val then
v_zcbz := v_zcbz||'1';
else
v_zcbz := v_zcbz||'0';
end if;
END IF;
END IF;
IF v_name='ftxnl' THEN --判断贷款年限加贷款申请人年龄是否超过法定退休年龄(女)
IF v_qybz='0' OR v_dkcs!=p_dkcs OR v_sex='0' THEN
v_zcbz := v_zcbz||'2';
ELSE
if (v_gdknx+v_age)>v_val then
v_zcbz := v_zcbz||'1';
else
v_zcbz := v_zcbz||'0';
end if;
END IF;
END IF;
END LOOP;
CLOSE c_dkzc;
update dk_per_detail
set zcbz=v_zcbz
where bh=p_bh;
END judge_dkzc;
/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -