原先的库表是建立在817上的,存储过程也运行无误
现在我将数据库导入9i下,原先的存储过程就编译不过去了,也没什么反应,好像死机状态,以下是我写的存储过程。
请诸位大虾帮忙解决一下。CREATE OR REPLACE PROCEDURE S_ZZ_JFJLSH_GS
(
Is_Jsfw             IN        VARCHAR2,
Is_Bm               IN        VARCHAR2,
Is_Jjgsq1           IN        VARCHAR2,
Is_Jjgsq2           IN        VARCHAR2,
Is_Sbjbjg           IN        VARCHAR2,             
Is_Jfbl             IN        VARCHAR2,Os_Return           OUT       VARCHAR2,
Os_ErrorInf         OUT       VARCHAR2
)
AS
--变量
S_Dwnm              YW_DA_RYJBXX.DWNM%TYPE;          
S_Grbh              YW_DA_RYJBXX.GRBH%TYPE;           
S_Grcbzt            YW_DM_GRJFZT.GRJFZTDM%TYPE;       
S_Ctsj              VARCHAR2(10);                     
S_Jfzt              YW_DM_JFZT.JFZTDM%TYPE;             
S_Jyztdm            YW_DA_RYJBXX.JYZTDM%TYPE;        
S_Sfyx              VARCHAR2(1);                     S_Gsq               VARCHAR2(10);                    N_SyJfjs            YW_SW_GRJFJL_GS.JFJS%TYPE;           
N_Jfjs              YW_SW_GRJFJL_GS.JFJS%TYPE;           
--自定义错误
E_Error             EXCEPTION;                          
E_Next              EXCEPTION;                          --游标
TYPE T_RCur_Ryxx IS REF CURSOR;                       
RCur_Ryxx           T_RCur_Ryxx;                      BEGIN
  Os_Return:='0';                                     
  Os_ErrorInf:='';
  N_Jfjs:=0;  IF Is_Jsfw='' THEN
    Os_ErrorInf:='计算范围参数未设定!';
    RETURN;
  END IF;
  IF Is_Bm='' THEN
    Os_ErrorInf:='单位编码或个人编码未设定!';
    RETURN;
  END IF;
  IF Is_Jjgsq1='' THEN
    Os_ErrorInf:='基金归属期参数未设定!';
    RETURN;
  END IF;
  IF Is_Jjgsq2='' THEN
    Os_ErrorInf:='基金归属期参数未设定!';
    RETURN;
  END IF;
  IF Is_Sbjbjg='' THEN
    Os_ErrorInf:='社保经办机构参数未设定!';
    RETURN;
  END IF;  SELECT SFYX      --是否取上月缴费基数参数
  INTO S_Sfyx
  FROM YW_XT_YWYXCS
  WHERE LBDM='4';
  --检索基金归属其所在年份的开始终止日期  --人员基本信息
  BEGIN--2
    IF Is_Jsfw = '1'  THEN                              
      OPEN RCur_Ryxx FOR
        SELECT A.DWNM,A.GRBH,A.CTSJ,A.JYZTDM,A.RYZTDM
          FROM  YW_DA_RYJBXX A
          WHERE A.DWNM=IS_Bm AND A.RYZTDM='0'         
                AND A.JYZTDM>='10' AND A.JYZTDM<='14';
    ELSE                                               
      OPEN RCur_Ryxx FOR
        SELECT A.DWNM,A.GRBH,A.CTSJ,A.JYZTDM,A.RYZTDM
          FROM  YW_DA_RYJBXX A
          WHERE A.GRBH=IS_Bm AND A.RYZTDM='0'         
                AND A.JYZTDM>='10' AND A.JYZTDM<='14';
    END IF;
    EXCEPTION
      WHEN OTHERS THEN
        Os_ErrorInf:='检索人员基本信息错误!原因:'||SQLERRM;
        RAISE E_Error;
  END;
  
  LOOP                                                  
  BEGIN  
    FETCH  RCur_Ryxx
      INTO S_Dwnm,S_Grbh,S_Ctsj,S_Jyztdm,S_Grcbzt;               
    EXIT WHEN RCur_Ryxx%NOTFOUND;    IF S_Grcbzt='0' THEN                                
      S_Jfzt:='0';                                     
    ELSIF S_Grcbzt='4' THEN                             
      S_Jfzt:='6';                                      
    ELSE
      RAISE E_Next;
    END IF;
    --
    BEGIN
      IF (S_Ctsj='') OR (S_Ctsj IS NULL) THEN
        RAISE E_Next;
      END IF;
    END;    BEGIN
      IF SUBSTR(S_Ctsj,1,7)>SUBSTR(Is_Jjgsq1,1,7) THEN
        RAISE E_Next;
      END IF;
    END;
    --上月缴费基数
    BEGIN --3
      SELECT TO_CHAR(ADD_MONTHS(TO_DATE(Is_JjGsq1,'YYYY-MM-DD'),-1),'YYYY-MM')
        INTO S_Gsq
        FROM DUAL;
      S_Gsq:=S_Gsq||'-15';      SELECT NVL(JFJS,0)                    
        INTO N_SyJfjs
        FROM YW_SW_GRJFJL_GS
        WHERE GRBH=S_GRbh AND JJGSQ=S_Gsq;
  if Is_Jfbl='1' then
     N_SyJfjs:=N_SyJfjs*1.1;
  END IF;
      --
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          N_SyJfjs:=0;
        WHEN OTHERS THEN
          Os_ErrorInf:='检索职工'||S_Grbh||'/'||S_Gsq||'上月缴费基数错误!原因:'||SQLERRM;
          RAISE E_Error;    END;  --3 BEGIN
  IF N_SyJfjs = 0 THEN
        SELECT NVL(JFJS,0)                    
          INTO N_SyJfjs
          FROM YW_SW_GRJFJL
          WHERE GRBH=S_GRbh AND JJGSQ=S_Gsq;
    if Is_Jfbl='1' then
     N_SyJfjs:=N_SyJfjs*1.1;
END IF;
  END IF;      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          N_SyJfjs:=0;
        WHEN OTHERS THEN
          Os_ErrorInf:='检索职工'||S_Grbh||'/'||S_Gsq||'上月缴费基数错误!原因:'||SQLERRM;
          RAISE E_Error;
    END;    --首次基金归属期
    S_Gsq:=Is_Jjgsq1;
   
    WHILE S_Gsq <= Is_Jjgsq2 LOOP
      BEGIN--11
        SELECT NVL(JFJS,0)
          INTO N_Jfjs
          FROM YW_SW_GRJFJL_GS
        WHERE GRBH=S_Grbh AND JJGSQ=S_Gsq;
IF S_Sfyx='T' THEN
          UPDATE YW_SW_GRJFJL_GS
            SET JFJS=N_SyJfjs
          WHERE GRBH=S_Grbh AND JJGSQ=S_Gsq AND JFZTDM='0';
  N_Jfjs:=N_SyJfjs;
ELSE
          UPDATE YW_SW_GRJFJL_GS
            SET JFJS=N_Jfjs
          WHERE GRBH=S_Grbh AND JJGSQ=S_Gsq AND JFZTDM='0';
END IF ;
        --
        EXCEPTION
          WHEN NO_DATA_FOUND THEN
if  S_Sfyx='T' THEN
              INSERT INTO YW_SW_GRJFJL_GS
                (GRBH,      DWNM,       JJGSQ,      JFJS,       BLCE,       DWJNBL,     GRJNBL,
                 DWHZBL,    DWJNJE,     GRJNJE,     DWHZJE,     GRDZRQ,     DWDZRQ,     GRJFBZ,
                 DWJFBZ,    SHRQ,       JFRQ,       LXBZ,       ZJDH,       JFZTDM,     JFLXDM,
                 LRLXDM,    JYZTDM )
              VALUES
                (S_Grbh,    S_Dwnm,     S_Gsq,      N_SyJfjs,   0,          0,          0,
                 0,         0,          0,          0,          NULL,       NULL,       '0',
                '0',        NULL,       NULL,       '0',        NULL,       S_Jfzt,     '1',
                '10',       S_Jyztdm ); else               INSERT INTO YW_SW_GRJFJL_GS
                (GRBH,      DWNM,       JJGSQ,      JFJS,       BLCE,       DWJNBL,     GRJNBL,
                 DWHZBL,    DWJNJE,     GRJNJE,     DWHZJE,     GRDZRQ,     DWDZRQ,     GRJFBZ,
                 DWJFBZ,    SHRQ,       JFRQ,       LXBZ,       ZJDH,       JFZTDM,     JFLXDM,
                 LRLXDM,    JYZTDM )
              VALUES
                (S_Grbh,    S_Dwnm,     S_Gsq,      0,     0,          0,          0,
                 0,         0,          0,          0,          NULL,       NULL,       '0',
                '0',        NULL,       NULL,       '0',        NULL,       S_Jfzt,     '1',
                '10',       S_Jyztdm );
end if;          WHEN OTHERS THEN
            Os_ErrorInf:='保存职工'||S_Grbh||'/'||S_Gsq||'缴费记录错误!'||SQLERRM;
            RAISE E_Error;
      END;  --11
      --基金归属其下月
      SELECT TO_CHAR(ADD_MONTHS(TO_DATE(S_Gsq,'YYYY-MM-DD'),1),'YYYY-MM')
        INTO S_Gsq
        FROM DUAL;
      S_Gsq:=S_Gsq||'-15';
    END LOOP;
    --
    EXCEPTION
      WHEN E_Next THEN
        NULL;
      WHEN OTHERS THEN
        Os_ErrorInf:='检索职工'||S_Grbh||'档案信息错误!原因:'||Os_ErrorInf||SQLERRM;
        RAISE E_Error;
  END;  --R
  NULL;  END LOOP;     --提交
  COMMIT;  Os_Return:='1';
  CLOSE RCur_Ryxx;
  EXCEPTION
    WHEN E_Error THEN
       ROLLBACK;
       CLOSE RCur_Ryxx;
    WHEN OTHERS THEN
       ROLLBACK;
       CLOSE RCur_Ryxx;
       Os_ErrorInf:='生成职工'||S_Grbh||'/'||S_Gsq||'缴费记录错误!'||Os_ErrorInf||SQLERRM;
END;
/