原先的库表是建立在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;
/
现在我将数据库导入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;
/
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货