简绍pl/sql编程的
https://www.cnblogs.com/defias/p/3334098.html
declare V_FIRST NUMBER := 0; begin DBMS_OUTPUT.put_line('######执行初始化####'); for i in (select t.id,t.name from t_rpt_jys t ) loop V_FIRST := i.id ; DBMS_OUTPUT.put_line(V_FIRST); end loop; end;
复杂一点例子
DECLARE BEGIN_DATE VARCHAR2(32); V_FIRST NUMBER := 0; V_COUNT1 NUMBER := 0; V_COUNT NUMBER := 0; V_COUNT_SUB NUMBER := 0; V_PRE_DAY_NET_AMOUNT NUMBER := 0; V_MEMBER_ID COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT.MEMBER_ID%TYPE; V_ACCOUNT_ID COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT.ACCOUNT_ID%TYPE; V_BUSINESS_DATE COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT.BUSINESS_DATE%TYPE; V_BALANCE COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT.BALANCE%TYPE; -- 账户余额 V_ACCRUAL COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT.ACCRUAL%TYPE; -- 发生额 V_CHANNEL_FEE COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT.SETTLE_CHANNEL_FEE%TYPE; -- 结算渠道费 V_NET_AMOUNT COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT.NET_AMOUNT%TYPE; -- 净额 BEGIN DBMS_OUTPUT.put_line('######初始化日报表信息开始,请务必等待执行结束####'); for I in (SELECT A.MEMBER_ID, M.MEMBER_NAME, A.ACCOUNT_ID, A.CREATE_TIME, A.ACCOUNT_TYPE FROM MEMBER.TR_MEMBER_ACCOUNT A, MEMBER.TM_MEMBER M WHERE A.MEMBER_ID = M.MEMBER_ID AND A.ACCOUNT_ID IS NOT NULL ORDER BY A.CREATE_TIME ASC) LOOP BEGIN_DATE := TO_CHAR(I.CREATE_TIME, 'YYYY-MM-DD'); WHILE BEGIN_DATE < TO_CHAR(SYSDATE, 'YYYY-MM-DD') LOOP -- 发生额 SELECT --T.ACCOUNT_NO, NVL(TT.SUM_TXN_AMT, '0.00') INTO V_ACCRUAL FROM DPM.T_DPM_OUTER_ACCOUNT T LEFT JOIN (SELECT TT1.ACCOUNT_NO, (SUM_TXN_AMT1 - SUM_TXN_AMT2) SUM_TXN_AMT FROM (SELECT T1.ACCOUNT_NO, SUM(T1.TXN_AMT) SUM_TXN_AMT1 FROM DPM.T_DPM_OUTER_ACCOUNT_DETAIL T1 WHERE T1.DIRECTION = '1' AND T1.TXN_TIME < TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') + 1 AND T1.TXN_TIME > TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') GROUP BY T1.ACCOUNT_NO) TT1 JOIN (SELECT T2.ACCOUNT_NO, SUM(T2.TXN_AMT) SUM_TXN_AMT2 FROM DPM.T_DPM_OUTER_ACCOUNT_DETAIL T2 WHERE T2.DIRECTION = '2' AND T2.TXN_TIME < TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') + 1 AND T2.TXN_TIME > TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') GROUP BY T2.ACCOUNT_NO) TT2 ON TT1.ACCOUNT_NO = TT2.ACCOUNT_NO) TT ON T.ACCOUNT_NO = TT.ACCOUNT_NO WHERE T.ACCOUNT_NO = I.ACCOUNT_ID; -- 结算渠道费 SELECT --TT1.ACCOUNT_NO, (NVL(TT1.SUB_AMT, '0.00') - NVL(TT2.SUB_AMT, '0.00')) INTO V_CHANNEL_FEE FROM (SELECT O1.ACCOUNT_NO, T2.SUB_AMT FROM DPM.T_DPM_OUTER_ACCOUNT O1 LEFT JOIN (SELECT UNIQUE T1.ACCOUNT_NO, T1.DIRECTION, SUM(T1.AMOUNT) OVER(PARTITION BY T1.ACCOUNT_NO, T1.DIRECTION) SUB_AMT FROM DPM.T_DPM_ACCOUNT_ENTRY T1 WHERE T1.DIRECTION = '1' AND t1.LAST_UPDATE_TIME < TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') + 1 AND t1.LAST_UPDATE_TIME > TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') AND T1.SYS_TRACE_NO LIKE 'FEE%') T2 ON O1.ACCOUNT_NO = T2.ACCOUNT_NO) TT1 LEFT JOIN (SELECT O1.ACCOUNT_NO, T2.SUB_AMT FROM DPM.T_DPM_OUTER_ACCOUNT O1 LEFT JOIN (SELECT UNIQUE T1.ACCOUNT_NO, T1.DIRECTION, SUM(T1.AMOUNT) OVER(PARTITION BY T1.ACCOUNT_NO, T1.DIRECTION) SUB_AMT FROM DPM.T_DPM_ACCOUNT_ENTRY T1 WHERE T1.DIRECTION = '2' AND t1.LAST_UPDATE_TIME < TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') + 1 AND t1.LAST_UPDATE_TIME > TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') AND T1.SYS_TRACE_NO LIKE 'FEE%') T2 ON O1.ACCOUNT_NO = T2.ACCOUNT_NO) TT2 ON TT1.ACCOUNT_NO = TT2.ACCOUNT_NO WHERE TT2.ACCOUNT_NO = I.ACCOUNT_ID; -- 账户余额 SELECT AFTER_AMT INTO V_BALANCE FROM MEMBER.TR_MEMBER_ACCOUNT A LEFT JOIN (select A.* from (select AD.*, row_number() over(partition by AD.ACCOUNT_NO order by AD.TXN_TIME desc) rw from DPM.T_DPM_OUTER_ACCOUNT_DETAIL AD WHERE AD.TXN_TIME < TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss') + 1) A where A.rw = 1) T ON A.ACCOUNT_ID = T.ACCOUNT_NO WHERE A.ACCOUNT_ID = I.ACCOUNT_ID; ----为空的情况-- IF V_BALANCE IS NULL THEN ---查询 SELECT COUNT(1) INTO V_COUNT FROM DPM.T_DPM_OUTER_ACCOUNT_DETAIL CO WHERE CO.ACCOUNT_NO = I.ACCOUNT_ID; IF V_COUNT = 0 THEN SELECT COUNT(1) INTO V_COUNT_SUB from dpm.t_dpm_outer_account_subset da where da.account_no = I.ACCOUNT_ID; IF V_COUNT_SUB = 0 THEN V_BALANCE := 0.00; ELSE select SUM(DA.BALANCE) INTO V_BALANCE from dpm.t_dpm_outer_account_subset da where da.account_no = I.ACCOUNT_ID; END IF; ELSE SELECT BEFORE_AMT INTO V_BALANCE FROM (SELECT DO.BEFORE_AMT FROM DPM.T_DPM_OUTER_ACCOUNT_DETAIL DO WHERE DO.ACCOUNT_NO = I.ACCOUNT_ID ORDER BY DO.TXN_TIME ASC) WHERE ROWNUM = 1; END IF; END IF; -- 净额 SELECT COUNT(1) INTO V_FIRST FROM COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT BAL WHERE BAL.ACCOUNT_ID = I.ACCOUNT_ID AND TO_CHAR(BAL.BUSINESS_DATE, 'YYYY-MM-DD') = TO_CHAR(TO_DATE(BEGIN_DATE, 'YYYY-MM-DD') - 1); IF V_FIRST = 0 THEN V_NET_AMOUNT := V_ACCRUAL - V_CHANNEL_FEE; ELSE SELECT NVL(NET_AMOUNT, 0) INTO V_PRE_DAY_NET_AMOUNT FROM COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT BAL WHERE TO_CHAR(BAL.BUSINESS_DATE, 'YYYY-MM-DD') = TO_CHAR(TO_DATE(BEGIN_DATE, 'YYYY-MM-DD') - 1); V_NET_AMOUNT := V_ACCRUAL - V_CHANNEL_FEE + V_PRE_DAY_NET_AMOUNT; END IF; SELECT COUNT(1) INTO V_COUNT FROM COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT BAL WHERE BAL.ACCOUNT_ID = I.ACCOUNT_ID AND TO_CHAR(BAL.BUSINESS_DATE, 'YYYY-MM-DD') = BEGIN_DATE; IF V_COUNT = 0 THEN INSERT INTO COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT (ID, MEMBER_ID, MEMBER_NAME, ACCOUNT_ID, ACCOUNT_TYPE, BUSINESS_DATE, ACCRUAL, SETTLE_CHANNEL_FEE, BALANCE, NET_AMOUNT, CREATE_DATE) VALUES (COUNTER.SEQ_TB_MARKET_DAY_REPORT.NEXTVAL, I.MEMBER_ID, I.MEMBER_NAME, I.ACCOUNT_ID, I.ACCOUNT_TYPE TO_DATE(BEGIN_DATE || ' 05:00:00', 'yyyy-mm-dd hh24:mi:ss'), V_ACCRUAL, V_CHANNEL_FEE, V_BALANCE, V_NET_AMOUNT, SYSDATE); ELSE UPDATE COUNTER.TB_MARKET_ACCOUNT_DAY_REPORT BAL SET BAL.ACCRUAL = V_ACCRUAL, BAL.SETTLE_CHANNEL_FEE = V_CHANNEL_FEE, BAL.BALANCE = V_BALANCE WHERE BAL.ACCOUNT_ID = I.ACCOUNT_ID AND TO_CHAR(BAL.BUSINESS_DATE, 'YYYY-MM-DD') = BEGIN_DATE; END IF; BEGIN_DATE := TO_CHAR(TO_DATE(BEGIN_DATE, 'YYYY-MM-DD') + 1, 'YYYY-MM-DD'); COMMIT; END LOOP; END LOOP; DBMS_OUTPUT.put_line('######初始化日报表信息结束######'); END;
相关推荐
详细 简明的Winsock编程简绍 tcp/udp的简建立、连接于释放详解
`strcpy`函数是C语言标准库中用于字符串复制的一个关键函数。...在实际编程中,应考虑使用更安全的替代品,如`strncpy`(尽管它也有其自身的局限),或者在C++中使用`std::string`类,以获得更好的内存管理和安全特性。
描述:“简绍了fanuc的PMC功能指令和机床编程器的用法” ### FANUC PMC 功能详解及编程操作指南 FANUC PMC(Programmable Machine Controller)是FANUC CNC系统中的一个重要组成部分,用于控制机床的辅助功能和...
2. C#编程基础:C#语言在GIS开发中的应用,基础语法和面向对象编程概念。 3. ArcEngine API:学习如何使用ArcEngine的API来创建地图、添加图层、进行空间分析等。 4. GIS应用程序开发:通过实例讲解如何使用C#和Arc...
桥规主要修订内容简绍.pdf
标题中的“球队简绍 flash”表明这是一个关于篮球球队介绍的Flash动画项目,可能是为了展示球队的历史、成员或者比赛情况。Flash是一种广泛应用于创建交互式内容、网页动画和多媒体项目的软件,由Adobe公司开发。在...
【标题】"机修钳工视频简绍简介" 涉及的核心知识点是关于机修钳工这一职业的技能和工作内容,通过视频形式进行教学和学习。在工业生产领域,机修钳工是一个至关重要的角色,他们主要负责机械设备的安装、维护、修理...
简绍oracle的内置函数,方便查看
虚拟店必备工具,淘宝专用
【Spring Boot 简介】 Spring Boot 是一个由 Pivotal 团队开发的 Java 框架,其设计目标是为了简化新 Spring 应用的初始搭建以及开发过程。Spring Boot 不是 Spring 框架的替代品,而是提供了一种快速配置 Spring ...
ls-dyna预应力加载简绍_相当详细.pdf
对数据库查询语句的简绍.此文档主要针对sqlserver的一些简单查询语句的介绍。
UNIX shell 编程详解,详细具体简绍shell编程从入门到高级应用
C语言是一种强大的编程语言,它的灵活性和效率使其广泛应用于系统编程、嵌入式开发以及软件开发等多个领域。在C语言中,头文件是至关重要的,它们提供了预定义的函数、常量、数据类型和宏,使得程序员能够方便地使用...
### 电信宽带设备简绍和工作原理 #### 一、概述 随着信息技术的快速发展,宽带网络已成为现代生活不可或缺的一部分。为了满足不断增长的数据传输需求,电信运营商广泛采用各种先进的网络技术和设备来提升服务质量和...
通过简单的`dd`命令或编程接口(如`mmap`和`memset`),开发者可以轻松地控制屏幕内容,这极大地简化了图形编程的复杂度,提高了效率。 #### 高级图形库与GUI系统 在理解了基础图形设施后,嵌入式Linux系统还提供...
iText 是一款流行的 Java 和 .NET 平台上的 PDF 文档处理库,用于创建、编辑和操作 PDF 文件。本篇文章将介绍如何使用 iText 创建 PDF 文件,特别是关注如何解决中文显示问题。 首先,我们来看创建一个简单的 PDF ...
【51单片机的看门狗介绍】 51单片机中的看门狗功能是一种重要的自我保护机制,尤其在STC89c51这类单片机中,它的作用在于防止程序因受到外界干扰而发生异常,陷入无限循环,导致系统失效。看门狗电路监控着单片机的...
### JAVA EL 表达式的简单介绍 #### 一、JSPEL语言定义及目的 EL (Expression Language) 是 JavaServer Pages (JSP) 技术的一部分,它的主要目的是简化 JSP 页面中的数据检索过程,使得开发者能够更方便地在 JSP ...
Java线程是Java编程语言中的一个关键概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是程序执行的最小单元,由JVM(Java虚拟机)来管理和调度。Java线程的入门学习至关重要,...