存储过程:
CREATE OR REPLACE PROCEDURE PRO_JGZHMX_FKXX_ZFXX_YE_FAIL(TABNAME VARCHAR2,
V_ID NUMBER,
V_Gjj NUMBER
) IS
TYPE FKXX_TABLE_TYPE IS TABLE OF FKXX%ROWTYPE INDEX BY BINARY_INTEGER;
FKXX_TABLE FKXX_TABLE_TYPE;
TYPE ZFXX_TABLE_TYPE IS TABLE OF ZFXX%ROWTYPE INDEX BY BINARY_INTEGER;
ZFXX_TABLE ZFXX_TABLE_TYPE;
V_YWZJ_ID JGZHMX.YWZJ_ID%TYPE; --业务主键
V_XMSXXX_ID JGZHMX.XMSXXX_ID%TYPE; --项目属性ID
V_JFFSE JGZHMX.JFFSE%TYPE; --资金监管账户借方发生额
V_DFFSE JGZHMX.DFFSE%TYPE; --资金监管账户贷方发生额
V_TABNAME USER_TABLES.TABLE_NAME%TYPE;
V_ZJJGZHXX_ID FKXX.ZJJGZHXX_ID%TYPE; --资金监管专户信息_ID
V_NUM CHAR(1);
V_HYSJ FKXX.HYSJ%TYPE;
V_ZJZHYE JGZHMX.ZJZHYE%TYPE; --资金监管专户信息的当前余额
V_VALUES NUMBER(20, 2);
V_Gjjjgxx_Id Fkxx.Gjjjgxx_Id%Type;
V_Zfxxgjj_Id Zfxx.Gjjjgxx_Id%Type;
BEGIN
V_TABNAME := UPPER(TABNAME);
BEGIN
/*
当放款表里的完结标志为失效(2)时
更新JGZHMX的标志位为1,同时更新监管账户表当前余额
*/
IF V_TABNAME = 'FKXX' THEN
SELECT * INTO FKXX_TABLE(1) FROM FKXX WHERE FKXX_ID = V_ID AND GJJJGXX_ID = V_Gjj;
V_YWZJ_ID := FKXX_TABLE(1).FKXX_ID;
V_JFFSE := FKXX_TABLE(1).JKJE; --fkxx借款金额
V_ZJJGZHXX_ID := FKXX_TABLE(1).ZJJGZHXX_ID;
V_HYSJ := FKXX_TABLE(1).HYSJ;
V_Gjjjgxx_Id := FKXX_TABLE(1).GJJJGXX_ID;
--提取监管账户明细中监管账户余额
SELECT COUNT(*)
INTO V_ZJZHYE
FROM JGZHMX
WHERE YWZJ_ID = V_YWZJ_ID
AND GJJJGXX_ID = V_Gjjjgxx_Id;
IF V_ZJZHYE <> 0 THEN
SELECT ZJZHYE
INTO V_ZJZHYE
FROM JGZHMX
WHERE YWZJ_ID = V_YWZJ_ID
AND GJJJGXX_ID = V_Gjjjgxx_Id;
END IF;
--查出JGZHMX交易日期>=fkxx核验时间的V_XMSXXX_ID
SELECT COUNT(*)
INTO V_XMSXXX_ID
FROM JGZHMX J, FKXX F
WHERE J.JYRQ >= F.HYSJ
AND J.YWZJ_ID = V_YWZJ_ID
AND J.GJJJGXX_ID = V_Gjjjgxx_Id
AND F.GJJJGXX_ID = V_Gjjjgxx_Id;
IF V_XMSXXX_ID <> 0 THEN
SELECT DISTINCT J.XMSXXX_ID
INTO V_XMSXXX_ID
FROM JGZHMX J, FKXX F
WHERE J.JYRQ >= F.HYSJ
AND J.YWZJ_ID = V_YWZJ_ID
AND J.GJJJGXX_ID = V_Gjjjgxx_Id
AND F.GJJJGXX_ID = V_Gjjjgxx_Id;
--资金监管专户信息的当前余额 '-' fkxx借款金额
V_VALUES := V_ZJZHYE - V_JFFSE;
--更新标志位,标志位为1
UPDATE JGZHMX
SET BZW = 1
WHERE YWZJ_ID = V_YWZJ_ID
AND XMSXXX_ID = V_XMSXXX_ID
AND GJJJGXX_ID = V_Gjjjgxx_Id;
--更新监管账户表当前余额
UPDATE ZJJGZHXX
SET DQYE = V_VALUES
WHERE ZJJGZHXX_ID = V_ZJJGZHXX_ID
AND GJJJGXX_ID = V_Gjjjgxx_Id;
COMMIT;
--更新JGZHMX交易日期>=fkxx核验时间的当前余额
UPDATE JGZHMX
SET ZJZHYE = ZJZHYE - V_JFFSE
WHERE JYRQ >= V_HYSJ
AND XMSXXX_ID = V_XMSXXX_ID
AND GJJJGXX_ID = V_Gjjjgxx_Id;
COMMIT;
END IF;
END IF;
END;
/*
当支付表里的完结标志为2 时
交易日期>=核验时间 更新本表里的标志位为1
*/
BEGIN
IF V_TABNAME = 'ZFXX' THEN
SELECT * INTO ZFXX_TABLE(1) FROM ZFXX WHERE ZFXX_ID = V_ID AND GJJJGXX_ID = V_Gjj;
V_YWZJ_ID := ZFXX_TABLE(1).ZFXX_ID;
V_DFFSE := ZFXX_TABLE(1).ZFZE; --zfxx支付总额
V_ZJJGZHXX_ID := ZFXX_TABLE(1).ZJJGZHXX_ID;
V_HYSJ := ZFXX_TABLE(1).HYSJ;
V_Zfxxgjj_Id := ZFXX_TABLE(1).GJJJGXX_ID;
--提取监管账户明细中监管账户余额
SELECT COUNT(*)
INTO V_ZJZHYE
FROM JGZHMX
WHERE YWZJ_ID = V_YWZJ_ID
AND GJJJGXX_ID = V_Zfxxgjj_Id;
IF V_ZJZHYE <> 0 THEN
SELECT ZJZHYE
INTO V_ZJZHYE
FROM JGZHMX
WHERE YWZJ_ID = V_YWZJ_ID
AND GJJJGXX_ID = V_Zfxxgjj_Id;
END IF;
--提取JGZHMX当前余额
SELECT COUNT(*)
INTO V_NUM
FROM JGZHMX
WHERE YWZJ_ID = V_YWZJ_ID
AND GJJJGXX_ID = V_Zfxxgjj_Id;
IF V_NUM <> 0 THEN
--查出JGZHMX交易日期>=zfxx核验时间的V_XMSXXX_ID
SELECT COUNT(*)
INTO V_XMSXXX_ID
FROM JGZHMX J, ZFXX F
WHERE J.JYRQ >= F.HYSJ
AND J.YWZJ_ID = V_YWZJ_ID
AND J.GJJJGXX_ID = V_Zfxxgjj_Id
AND F.GJJJGXX_ID = V_Zfxxgjj_Id;
IF V_XMSXXX_ID <> 0 THEN
SELECT DISTINCT J.XMSXXX_ID
INTO V_XMSXXX_ID
FROM JGZHMX J, ZFXX F
WHERE J.JYRQ >= F.HYSJ
AND J.YWZJ_ID = V_YWZJ_ID
AND J.GJJJGXX_ID = V_Zfxxgjj_Id
AND F.GJJJGXX_ID = V_Zfxxgjj_Id;
--资金监管专户信息的当前余额 '+' zfxx支付总额
V_VALUES := V_ZJZHYE + V_DFFSE;
--更新当前余额和标志位,标志位为1
UPDATE JGZHMX
SET BZW = 1
WHERE YWZJ_ID = V_YWZJ_ID
AND XMSXXX_ID = V_XMSXXX_ID
AND GJJJGXX_ID = V_Zfxxgjj_Id;
COMMIT;
--更新监管账户表当前余额
UPDATE ZJJGZHXX
SET DQYE = V_VALUES
WHERE ZJJGZHXX_ID = V_ZJJGZHXX_ID
AND GJJJGXX_ID = V_Zfxxgjj_Id;
COMMIT;
--更新JGZHMX交易日期>=fkxx核验时间的当前余额
UPDATE JGZHMX
SET ZJZHYE = ZJZHYE + V_DFFSE
WHERE JYRQ >= V_HYSJ
AND XMSXXX_ID = V_XMSXXX_ID
AND GJJJGXX_ID = V_Zfxxgjj_Id;
COMMIT;
END IF;
END IF;
END IF;
END;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
DBMS_OUTPUT.PUT_LINE(SQLCODE || ' ' || '触发器-表名:' || V_TABNAME || ' ' ||
'业务id:' || V_YWZJ_ID);
END;
存储过程:
CREATE OR REPLACE PROCEDURE PRO_DZTZMX_SFWJ_FAIL(V_DAYS VARCHAR2) IS
TYPE FKXX_REC_TYPE is record(
V_FKXX_ID FKXX.FKXX_ID%TYPE, --放款信息ID
V_FK_GJJJGXX_ID FKXX.GJJJGXX_ID%TYPE --放款中心信息ID
);
TYPE FKXX_TABLE_TYPE IS TABLE OF FKXX_REC_TYPE;
FKXXID_TABLE FKXX_TABLE_TYPE;
TYPE ZFXXID_REC_TYPE is record(
V_ZFXX_ID ZFXX.ZFXX_ID%TYPE, --支付信息ID
V_ZF_GJJJGXX_ID ZFXX.GJJJGXX_ID%TYPE --支付中心信息ID
);
TYPE ZFXX_TABLE_TYPE IS TABLE OF ZFXXID_REC_TYPE;
ZFXXID_TABLE ZFXX_TABLE_TYPE;
VFkxx_Id Fkxx.Fkxx_Id%Type;
VZfxx_Id Zfxx.Zfxx_Id%Type;
VGjjjgxx_Id Fkxx.Gjjjgxx_Id%Type;
VZfxxgjj_Id Zfxx.Gjjjgxx_Id%Type;
V_SQL VARCHAR2(2000);
BEGIN
BEGIN
--fkxx 当前时间大于核验时间V_DAYS
BEGIN
V_SQL := 'SELECT FKXX_ID,GJJJGXX_ID FROM FKXX WHERE (SFWJ = 0 OR SFWJ IS NULL ) AND FKZT = 7 AND HYSJ IS NOT NULL AND TO_CHAR(TRUNC(SYSDATE) - TRUNC(HYSJ)) > ' ||
V_DAYS;
EXECUTE IMMEDIATE V_SQL BULK COLLECT
INTO FKXXID_TABLE;
FOR I IN 1 .. FKXXID_TABLE.COUNT LOOP
VFkxx_Id := FKXXID_TABLE(I).V_FKXX_ID;
VGjjjgxx_Id := FKXXID_TABLE(I).V_FK_GJJJGXX_ID;
UPDATE FKXX SET SFWJ = 2 WHERE FKXX_ID = VFkxx_Id AND GJJJGXX_ID = VGjjjgxx_Id;
COMMIT;
END LOOP;
END;
--zfxx 当前时间大于核验时间V_DAYS
BEGIN
V_SQL := 'SELECT ZFXX_ID,GJJJGXX_ID FROM zfxx WHERE (SFWJ = 0 OR SFWJ IS NULL ) AND zfzt = 7 AND HYSJ IS NOT NULL AND TO_CHAR(TRUNC(SYSDATE) - TRUNC(HYSJ)) > ' ||
V_DAYS;
EXECUTE IMMEDIATE V_SQL BULK COLLECT
INTO ZFXXID_TABLE;
FOR I IN 1 .. ZFXXID_TABLE.COUNT LOOP
VZfxx_Id := ZFXXID_TABLE(I).V_ZFXX_ID;
VZfxxgjj_Id := ZFXXID_TABLE(I).V_ZF_GJJJGXX_ID;
UPDATE ZFXX SET SFWJ = 2 WHERE ZFXX_ID = VZfxx_Id AND GJJJGXX_ID = VZfxxgjj_Id;
COMMIT;
END LOOP;
END;
END;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('错误' || SQLCODE);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
触发器:
create or replace trigger tr_DZTZMX_BOC
before insert On DZTZMX_BOC
For Each Row
Declare
Pragma Autonomous_Transaction; --加自治事务 触发器中可以commit,否则报错!
Type Fkxx_Table_Type Is Table Of Fkxx%Rowtype;
Fkxx_Table Fkxx_Table_Type;
V_Zjjgzhxx_Id Zjjgzhxx.Zjjgzhxx_Id%Type;
V_Xmsxxx_Id Zjjgzhxx.Xmcjsxx_Id%Type;
V_Zh Zjjgzhxx.Zh%Type;
V_Fkxx_Id Fkxx.Fkxx_Id%Type;
V_Zfxx_Id Zfxx.Zfxx_Id%Type;
V_Gjjjgxx_Id Fkxx.Gjjjgxx_Id%Type;
V_Zfxxgjj_Id Zfxx.Gjjjgxx_Id%Type;
V_Amount Dztzmx_Boc.Amount%Type;
V_Jkje Fkxx.Jkje%Type;
V_Dztzmx_Id Dztzmx_Boc.Dztzmx_Id%Type;
V_Accno Dztzmx_Boc.Accno%Type;
V_Recipaccno Dztzmx_Bocom.Recipaccno%Type;
V_Drcrf Dztzmx_Abc.Drcrf%Type; --借贷标志(D:借、C:贷)
Begin
--获取插入时传入的新值
V_Dztzmx_Id := :New.Dztzmx_Id;
V_Amount := :New.Amount;
V_Accno := :New.Accno;
V_Recipaccno := :New.Recipaccno;
V_Drcrf := :New.Drcrf;
/*查找ZJJGZHXX中 ZJJGZHXX_ID,XMSXXX_ID, ZH.
条件是 DZTZMX_BOC的账号 等于 ZJJGZHXX 账号*/
Begin
If V_Drcrf = 'C' Then
For V_Record In (Select A.Zjjgzhxx_Id, A.Xmsxxx_Id, A.Zh
From Zjjgzhxx a
Where A.Zh = V_Accno) Loop
V_Zjjgzhxx_Id := V_Record.Zjjgzhxx_Id;
V_Xmsxxx_Id := V_Record.Xmsxxx_Id;
V_Zh := V_Record.Zh;
-- fkxx的借款金额=DZTZMX_BOC的发生额
Select * Bulk Collect
Into Fkxx_Table
From Fkxx
Where Zjjgzhxx_Id = V_Zjjgzhxx_Id
And Xmsxxx_Id = V_Xmsxxx_Id
And Nvl(Sfwj, 0) <> 1
And Jkje = V_Amount / 100
And Fkzt = 7
And Bzw <> 1
And Hysj Is Not Null;
For i In 1 .. Fkxx_Table.Count Loop
V_Jkje := (Fkxx_Table(i).Jkje) * 100;
V_Fkxx_Id := Fkxx_Table(i).Fkxx_Id;
V_Gjjjgxx_Id := Fkxx_Table(i).Gjjjgxx_Id;
If V_Jkje = V_Amount Then
--更新FKXX的是否完结为1
Update Fkxx
Set Sfwj = 1
Where Fkxx_Id = V_Fkxx_Id
And Gjjjgxx_Id = V_Gjjjgxx_Id;
Commit;
--更新FKXX的是否完结为1 张丽萍更新
:New.Sfdz := 1;
Exit;
End If;
End Loop;
End Loop;
End If;
End;
Begin
/* zfxx的支付总额=DZTZMX_BOC的发生额
DZTZMX_BOC账号=zfxx的账号*/
If V_Drcrf = 'D' Then
For V_Record In (Select Z.Zfxx_Id, Z.Gjjjgxx_Id
From Zfxx z
Where Z.Jydszh = V_Recipaccno
And Z.Zfze * 100 = V_Amount
And Nvl(Z.Sfwj, 0) <> 1
And Z.Zfzt = 7
And Z.Bzw <> 1
And Z.Hysj Is Not Null) Loop
V_Zfxx_Id := V_Record.Zfxx_Id;
V_Zfxxgjj_Id := V_Record.Gjjjgxx_Id;
--更新zfxx的是否完结为1
Update Zfxx
Set Sfwj = 1
Where Zfxx_Id = V_Zfxx_Id
And Gjjjgxx_Id = V_Zfxxgjj_Id;
Commit;
--更新FKXX的是否完结为1 张丽萍更新
:New.Sfdz := 1;
Exit;
End Loop;
End If;
End;
Exception
When Others Then
Dbms_Output.Put_Line('错误' || Sqlcode);
Dbms_Output.Put_Line(Sqlerrm);
End;
触发器:
CREATE OR REPLACE TRIGGER TRG_JGZHMX_FKXX_YE AFTER
UPDATE OF SFWJ ON FKXX
FOR EACH ROW
Declare
Pragma Autonomous_Transaction;
New_Sfwj Fkxx.Sfwj%Type;
Old_Sfwj Fkxx.Sfwj%Type;
V_Fkxx_Id Fkxx.Fkxx_Id%Type;
V_Gjjjgxx_Id Fkxx.Gjjjgxx_Id%Type;
V_Tabname Varchar2(10) := 'fkxx';
Begin
New_Sfwj := :New.Sfwj;
Old_Sfwj := :Old.Sfwj;
V_Fkxx_Id := :New.Fkxx_Id;
V_Gjjjgxx_Id := :New.Gjjjgxx_Id;
If New_Sfwj = 2 And Old_Sfwj = 0 Then
Pro_Jgzhmx_Fkxx_Zfxx_Ye_Fail(V_Tabname, V_Fkxx_Id, V_Gjjjgxx_Id);
Elsif New_Sfwj = 1 And Old_Sfwj = 2 Then
Pro_Jgzhmx_Fkxx_Zfxx_Ye_Finish(V_Tabname, V_Fkxx_Id, V_Gjjjgxx_Id);
End If;
Exception
When Others Then
Dbms_Output.Put_Line(Sqlerrm);
Dbms_Output.Put_Line(Sqlcode || ' ' || '触发器-表名:' || V_Tabname || ' ' ||
'业务id:' || V_Fkxx_Id);
End;
分享到:
相关推荐
N11数据库管理工具是一款专为Windows 10操作系统设计的高效、易用的数据库管理应用,它提供了全面的功能,帮助用户轻松管理和操作各种类型的数据库。N11数据库工具不仅适用于初学者,也适合有一定数据库管理经验的...
KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具...
Excel VBA与数据库整合应用范例精讲(范例文件代码) 内容简介 《Excel VBA 数据库整合应用范例精讲》用180个实例介绍了利用Excel VBA来操作数据库(包括Access、SQL Server和FoxPro)的实用方法和技巧。 全书共11章...
tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份...
Oracle数据库课程设计医院系统数据库源代码。包含Java代码和SQL语句。源码中默认使用的数据库为运行的Oracle数据库 如需修改,在java源码/database.propertie中修改即可!Oracle数据库课程设计医院系统数据库源代码...
神通数据库驱动jar,Java 连接神通数据库驱动包(亲测有效)神通数据库驱动jar,Java 连接神通数据库驱动包(亲测有效)神通数据库驱动jar,Java 连接神通数据库驱动包(亲测有效)神通数据库驱动jar,Java 连接神通...
中国高校数据库是一个专门为UCHome等社交网络平台设计的数据库资源,包含了丰富的中国高等教育机构的数据信息。这个数据库的主要目的是为了提供一个全面、准确的高校信息源,以便用户在社区环境中进行交流、分享和...
数据库迁移 3.0 迁移准备 注意:本地网络必须能正常连接到瀚高数据库 有2种方式: 本机和服务器网络 互通,可以直接连接到上文中安装的服务器端的瀚高数据库; 本机和服务器网络 不互通,则需要在本地安装瀚高数据库...
网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档以及相关报表网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关...
腾讯云数据库mysql产品认证答案涵盖了mysql数据库、腾讯云、云数据库、mysql数据库认证和腾讯云云数据库产品等方面的知识点,是一份非常重要的认证考试答案,能够帮助考生更好地掌握mysql数据库管理和维护知识。
python系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库....
Activiti 适配达梦数据库教程 activiti 是一个开源的 Workflow 和 BPM system,它提供了强大的工作流引擎和业务流程管理功能。然而,activiti 默认支持的数据库只有 MySQL、 PostgreSQL、Oracle 等少数几种,而达梦...
在使用采用sqlserver作为数据库的大型软件,因断电、异常操作、磁盘物理坏道等引起的数据库出现“置疑”标志,可以通过这个工具快速修复。 这个工具的原理很简单:新建同名数据库,然后用出现质疑的数据库数据文件...
"国家开放大学 MySQL数据库应用实验训练1 在MySQL中创建数据库和表" 本实验训练旨在让学生掌握 MySQL 中的数据库和表的创建过程。 MySQL 是一种关系型数据库管理系统,广泛应用于各种领域。为提高学生的实践能力,...
"Sybase 数据库扩容详解" Sybase 数据库扩容是指对现有的数据库设备进行扩展,以满足不断增长的数据存储需求。扩容可以通过增加新的数据库设备或扩展现有的数据库设备来实现。在本文中,我们将一步步讲述 Sybase ...
在IT行业中,数据库管理系统(DBMS)的选择对任何应用程序的性能和稳定性至关重要。Nacos作为一个流行的微服务管理和配置中心,通常会与常见的数据库如MySQL、Oracle等进行集成。然而,对于国内用户,尤其是那些需要...
软件数据库设计文档模板 software database design report document" 在软件开发项目中,数据库设计是非常重要的一步骤,它直接影响到软件系统的性能、安全性和可维护性。本文档提供了一份软件数据库设计文档模板...
数据库系统概念 (本科教学版·原书第7版) 数据库领域的殿堂级作品。夯实数据库理论基础,修炼数据库技术内功的之选。对深入理解数据库,深人研究数据库,深入操作数据库都具有极强的指导作用! 《数据库系统概念》...
* 数据库巡检报告是对数据库当前状态的总结,包括硬件平台、服务器序列号、CPU 型号、内存、硬盘型号、主机名、IP 地址、操作系统版本、数据库版本、数据库架构、数据库名称、数据库大小、数据库启动时间、当前会话...
根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签中的信息,对可能涉及的关键知识点进行归纳总结。 ### 数据库设计的...