如何查看ORACLE的异常记录日志??
解决方案 »
- 使用OCI C语言开发中 关于调用存储过程 返回值问题
- 实现Oracle Database 10g Express Edition与 Tomcat 6的连接
- PL/SQL Developer对Oracle 10g中某个表Query Data时只显示部分数据?
- 急! 求大神 关于恢复PLSQL文件
- 请问如何写一下的SQL语句(菜鸟问题)
- sql*plus中使用edit命令
- 为何在Oracle企业管理器无法备份~
- 为什么asp.net连接oracle会显示乱码,而连接sqlserver就没事
- oracel安装问题,急
- 求教:存储空间问题
- TOAD 连接 oracle10G 报错!
- oracle standby failover后怎样重建standby
yhbh_v t_yhxx.yhbh%TYPE, --用户编号
jkje_v t_dsjl.je%TYPE, --缴款金额
je_v t_dsjl.je%TYPE, --欠费金额
fphm_v t_ssjl.fphm%TYPE, --发票号码
qssj_v DATE, --起始时间
jzsj_v DATE, --截止时间
bz_v VARCHAR2, --收费备注
jsrbh_v s_czry.rybh%TYPE, --经手人员编号
sfjg_v t_ssjl.sfjg%TYPE, --收费机构
anetuser_v t_ssjl.czy%TYPE, --操作员代码
fhz OUT NUMBER) --返回值
AS
zhye_v t_yhxx.zhye%TYPE; --用户帐户余额
je_v1 t_dsjl.je%TYPE; --用户在该段时间内应缴纳的金额
je_v2 t_dsjl.je%TYPE; --中心待收表中的欠费金额
qssj_v2 DATE; --起始时间
jzsj_v2 DATE; --截止时间
je_v3 t_dsjl.je%TYPE; --前置机待收表中的欠费金额
qssj_v3 DATE; --起始时间
jzsj_v3 DATE; --截止时间
dkjf_v t_yhxx.dkjf%TYPE; --代扣缴费
lsbl NUMBER; --临时变量
cwndsxsj_v DATE; --财务年度生效时间
dwbh_v1 s_dwxx.dwbh%TYPE; --用户所在单位编号
dwbh_v2 s_dwxx.dwbh%TYPE; --使用该发票号码的单位编号
BEGIN
--取本财务年度的生效时间
SELECT COUNT(*) INTO lsbl FROM s_cwnd;
IF lsbl>0 THEN
--如果财务年度表中有存在记录,则取最大财务年度的生效时间
SELECT sxsj INTO cwndsxsj_v FROM s_cwnd
WHERE cwnd=(SELECT MAX(cwnd) FROM s_cwnd);
ELSE
--如果财务年度表中不存在记录,则默认财务年度生效时间为2000年1月1日
cwndsxsj_v:=TO_DATE('20000101','yyyymmdd');
END IF;
--取用户帐户余额
SELECT zhye,dkjf INTO zhye_v,dkjf_v FROM t_yhxx WHERE yhbh=yhbh_v;
--判断缴款与欠费金额的关系
IF jkje_v+zhye_v<je_v THEN
fhz:=-60514;
RETURN;
END IF;
--如果发票号码不为0000000,则判断该发票是否已经被使用
IF fphm_v<>'0000000' THEN
--查询该发票是否已经被使用(对单笔业务来讲,发票是不能重用的)
--注意财务年度的区别(只判断本财务年度)
IF Init.IfInvoiceUsed(fphm_v,2,jsrbh_v)<>0 THEN
--该发票已经被使用
fhz:=-60513;
RETURN;
END IF;
--判断发票是否是该用户拥有的
--未销号表没有必要判断财务年度,这是因为财务年度结转时把未销号表清空了
--当前未销号表中的记录一定是本财务年度的
fhz:=-60518;
SELECT COUNT(*) INTO lsbl FROM t_wxhfp
WHERE pldh=2 AND jsr=jsrbh_v AND
TO_NUMBER(fphm_v) BETWEEN TO_NUMBER(qsph) AND TO_NUMBER(mwph);
IF lsbl=0 THEN
--当前经手人不拥有该发票的使用权
fhz:=-60517;
RETURN;
END IF;
END IF;
--对于没有欠费的用户,可以缴纳费用,在过帐后直接转入该用户的帐户余额
IF je_v=0 THEN
--增加余额收费记录
fhz:=-60516;
INSERT INTO t_yejl(yhbh,je,jsr,hdr,sfsj,gzqk,czsj,bz)
VALUES(yhbh_v,jkje_v,jsrbh_v,NULL,SYSDATE,0,SYSDATE,bz_v);
COMMIT;
fhz:=0;
RETURN;
END IF;
--如果该用户没有签订代扣缴费协议,则执行下面的操作
IF dkjf_v=0 THEN
--取中心表中待收记录的起始时间、截止时间和待收金额
SELECT MIN(qssj),MAX(jzsj),SUM(je) INTO qssj_v2,jzsj_v2,je_v2
FROM t_dsjl WHERE yhbh=yhbh_v AND je>0;
--取前置机表中待收记录的起始时间、截止时间和待收金额
SELECT MIN(qssj),MAX(jzsj),SUM(je) INTO qssj_v3,jzsj_v3,je_v3
FROM t_dsjl@qzj WHERE yhbh=yhbh_v AND je>0;
--如果上面两组值相等,则认为前置机的待收数据和中心完全相同,否则不能处理
IF NOT (TO_CHAR(qssj_v2,'yyyymmdd')=TO_CHAR(qssj_v3,'yyyymmdd')
AND TO_CHAR(jzsj_v2,'yyyymmdd')=TO_CHAR(jzsj_v3,'yyyymmdd')
AND je_v2=je_v3) THEN
fhz:=-60507;
RETURN;
END IF;
ELSE
--如果该用户已经签订了代扣协议,则从代扣表中查询代扣记录,
--同时,该记录必须还没有要求代扣(即:yqdk=0)
fhz:=-60515;
SELECT MIN(qssj),MAX(jzsj),SUM(je) INTO qssj_v2,jzsj_v2,je_v2
FROM t_dkjl@qzj WHERE yhbh=yhbh_v AND je>0 AND yqdk=0;
END IF;
--取该用户的第一条记录的截止时间
fhz:=-60501;
SELECT MIN(jzsj) INTO jzsj_v2 FROM t_dsjl
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v,'yyyymmdd');
IF TO_CHAR(jzsj_v2,'yyyymmdd')<=TO_CHAR(jzsj_v,'yyyymmdd') THEN
--如果有多条待收记录
qssj_v2:=qssj_v;
--计算该用户在指定时间内需要缴纳多少金额
je_v1:=GetYhSsf(yhbh_v,qssj_v,jzsj_v);
IF je_v1=0 THEN
fhz:=-60512;
RETURN;
END IF;
--判断待缴金额和需缴金额是否相同
IF je_v=je_v1 THEN
WHILE TO_CHAR(jzsj_v2,'yyyymmdd')<=TO_CHAR(jzsj_v,'yyyymmdd') LOOP
--删除中心表中的待收记录
DELETE FROM t_dsjl
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v2,'yyyymmdd') AND
TO_CHAR(jzsj,'yyyymmdd')=TO_CHAR(jzsj_v2,'yyyymmdd');
--删除前置机表中的待收记录
DELETE FROM t_dsjl@qzj
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v2,'yyyymmdd') AND
TO_CHAR(jzsj,'yyyymmdd')=TO_CHAR(jzsj_v2,'yyyymmdd');
qssj_v2:=jzsj_v2+1;
SELECT COUNT(*) INTO lsbl FROM t_dsjl
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v2,'yyyymmdd');
IF lsbl>0 THEN
SELECT jzsj INTO jzsj_v2 FROM t_dsjl
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v2,'yyyymmdd');
ELSE
EXIT;
END IF;
END LOOP;
--处理最后一段收视费
IF TO_CHAR(jzsj_v2,'yyyymmdd')>TO_CHAR(jzsj_v,'yyyymmdd') THEN
--如果待缴金额和需缴金额相同,则更新中心待收记录中的起始时间和待收金额
--je_v2是待收金额总和
fhz:=-60504;
UPDATE t_dsjl SET qssj=jzsj_v+1,je=je_v2-je_v
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v2,'yyyymmdd') AND
TO_CHAR(jzsj,'yyyymmdd')=TO_CHAR(jzsj_v2,'yyyymmdd');
--更新前置机待收记录中的起始时间和待收金额
fhz:=-60508;
UPDATE t_dsjl@qzj SET qssj=jzsj_v+1,je=je_v2-je_v
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v2,'yyyymmdd') AND
TO_CHAR(jzsj,'yyyymmdd')=TO_CHAR(jzsj_v2,'yyyymmdd');
END IF;
--在收视记录表中增加收视记录
--收费机构(1--窗口2--银行3--收费组,4--历史数据)
--收费记录是否打印(0--未打印1--已打印需统计2--已打印不统计)
fhz:=-60509;
INSERT INTO t_ssjl(yhbh,je,fphm,qssj,jzsj,jsr,hdr,sfsj,sfjg,czy,czsj,jldy,bz)
VALUES(yhbh_v,je_v,fphm_v,qssj_v,jzsj_v,jsrbh_v,NULL,SYSDATE,sfjg_v,anetuser_v,SYSDATE,0,bz_v);
ELSE
--如果待缴金额和需缴金额不同,返回错误信息
fhz:=-60505;
ROLLBACK;
RETURN;
END IF;
ELSE
--jzsj_v2>jzsj_v
--计算该用户在指定时间内需要缴纳多少金额
je_v1:=GetYhSsf(yhbh_v,qssj_v,jzsj_v);
--判断待缴金额和需缴金额是否相同
IF je_v=je_v1 THEN
--如果待缴金额和需缴金额相同,则更新中心待收记录中的起始时间和待收金额
fhz:=-60504;
UPDATE t_dsjl SET qssj=jzsj_v+1,je=je-je_v
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v,'yyyymmdd') AND
TO_CHAR(jzsj,'yyyymmdd')=TO_CHAR(jzsj_v2,'yyyymmdd');
--更新前置机待收记录中的起始时间和待收金额
fhz:=-60508;
UPDATE t_dsjl@qzj SET qssj=jzsj_v+1,je=je-je_v
WHERE yhbh=yhbh_v AND je>0 AND
TO_CHAR(qssj,'yyyymmdd')=TO_CHAR(qssj_v,'yyyymmdd') AND
TO_CHAR(jzsj,'yyyymmdd')=TO_CHAR(jzsj_v2,'yyyymmdd');
--在收视记录表中增加收视记录
--收费机构(1--窗口2--银行3--收费组,4--历史数据)
--收费记录是否打印(0--未打印1--已打印需统计2--已打印不统计)
fhz:=-60509;
INSERT INTO t_ssjl(yhbh,je,fphm,qssj,jzsj,jsr,hdr,sfsj,sfjg,czy,czsj,jldy,bz)
VALUES(yhbh_v,je_v,fphm_v,qssj_v,jzsj_v,jsrbh_v,NULL,SYSDATE,sfjg_v,anetuser_v,SYSDATE,0,bz_v);
commit;
ELSE
--如果待缴金额和需缴金额不同,返回错误信息
fhz:=-60505;
ROLLBACK;
RETURN;
END IF;
END IF;
--如果缴款金额大于欠费金额,则生成余额缴费记录
IF jkje_v-je_v>0 THEN
--增加余额收费记录
fhz:=-60516;
INSERT INTO t_yejl(yhbh,je,jsr,hdr,sfsj,gzqk,czsj,bz)
VALUES(yhbh_v,jkje_v-je_v,jsrbh_v,NULL,SYSDATE,0,SYSDATE,bz_v);
END IF;
COMMIT;
fhz:=0;
EXCEPTION
WHEN no_data_found THEN
ROLLBACK;
RETURN;
WHEN OTHERS THEN
IF fhz>=0 THEN
fhz:=-60500;
END IF;
ROLLBACK;
RETURN;
END BossSsfGrjf;在A库的PL/SQL里,在JDBC里,在A库的procedure里调用得到的返回值都是-60509,在B库的PL/SQL里procedure里都得到0正常COMMIT数据
EXCEPTION
WHEN no_data_found THEN
ROLLBACK;
RETURN;
WHEN OTHERS THEN
IF fhz>=0 THEN
fhz:=-60500;
END IF;
ROLLBACK;
RETURN;