⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 政策判断存储过程.sql

📁 关于oracle和sql的书籍和ppt教程,非常好,本人珍藏品
💻 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 + -