首页 > 其他分享 >游标、循环、定义变量等的使用

游标、循环、定义变量等的使用

时间:2024-07-31 08:55:03浏览次数:7  
标签:CIF NO -- 游标 客户 EXIST cur 变量 定义

一、生产上的一次需求

现有存量的一些数据需要刷数:根据客户表找到注销状态的客户号,循环这些客户号,将客户关联的账号表也一起注销掉、将客户关联的证件映射表也一起删除掉。账号表、和证件映射表都是分表的,从0~29,客户表也是分表一样。

写了个批量执行的脚本:

/**
  找到客户表中状态为C的记录(游标1)
  逐个遍历游标1
  
  如果存在客户的账户表,根据客户号更新账号表,将acState更新为C
  如果存在客户证件映射,根据客户号删除证件映射表记录
  
  注意:执行前需要修改cur_mkt_cif中表后面的数字,从0开始持续到29。
*/
DECLARE
C_NUM NUMBER(2,0);
V_STATE_CANCEL CONSTANT VARCHAR := 'C';
CURSOR cur_mkt_cif IS SELECT CIF_NO from MKTPRD.MKT_CIF_0 WHERE CIF_STATE = 'C';
--注销状态的客户号
V_CIF_NO VARCHAR(20);
--是否存在待注销的账户
V_ACCT_EXIST NUMBER(20,0);
--是否存在待删除的证件映射
V_MAPPING_EXIST NUMBER(20,0);

BEGIN
 OPEN cur_mkt_cif;
 LOOP
   FETCH cur_mkt_cif INTO V_CIF_NO;
   EXIT WHEN cur_mkt_cif%NOTFOUND;
   --循环所有分表
   FOR C_NUM IN 0..29 LOOP
    --根据客户号更新账号表
	EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM MKTPRD.MKT_CIF_ACCT_'||C_NUM||' WHERE CIF_NO = ?' INTO V_ACCT_EXIST USING V_CIF_NO;
	IF V_ACCT_EXIST > 0 THEN
          EXECUTE IMMEDIATE 'UPDATE MKTPRD.MKT_CIF_ACCT_'||C_NUM||' SET AC_STATE= ? WHERE CIF_NO = ?' USING V_STATE_CANCEL, V_CIF_NO;
	END IF;
    --根据客户号删除证件映射表
	EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM MKTPRD.MKT_CIF_IDNO_MAPPING_'||C_NUM||' WHERE CIF_NO= ?' INTO V_MAPPING_EXIST USING V_CIF_NO;
	IF V_MAPPING_EXIST > 0 THEN
          EXECUTE IMMEDIATE 'DELETE FROM MKTPRD.MKT_CIF_IDNO_MAPPING_'||C_NUM||' WHERE CIF_NO = ?' USING V_CIF_NO;
	END IF;
   END LOOP;
 END LOOP;
 COMMIT;
 CLOSE cur_mkt_cif;
END;

 

标签:CIF,NO,--,游标,客户,EXIST,cur,变量,定义
From: https://www.cnblogs.com/tenWood/p/18333765

相关文章

  • 类字段/实例变量的 Pycharm 类型提示
    每当我们在Java中需要一个新对象时,我们都会声明类型和名称,选择是否为其提供初始值。在Python中我们不能这样做,因为我们没有声明类型。我怎样才能解决这个问题,因为如果没有声明类型;我没有收到任何代码完成提示。就像特定对象的字段或我们可以在该对象上调用的任何方法一样........
  • springboot项目使用自定义starter
    首先是自定义的starter部分pom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&......
  • vue模板中使用临时变量实例,for 循环中使用临时变量继承函数运行结果示例,函数运行结果
    示例代码<!--vue模板中使用临时变量测试示例--><template><divclass="component-name"><!--vue模板中循环定义临时变量实现--><divv-for="iteminitems":key="item.id":data-item="(itemTemp=formatter......
  • 环境变量和python多版本共存,视图层源码分析,视图层总结,路由层,
    Ⅰ环境变量和python多版本共存【一】环境变量【1】什么是环境变量无论是win,mac,linux都有环境变量的概念,以win为例什么是环境变量?环境变量(environmentvariables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在......
  • 打造专属体验:Laravel自定义命令行提示全指南
    打造专属体验:Laravel自定义命令行提示全指南在Laravel的生态系统中,artisan命令行工具是与框架互动的强大方式。通过artisan,开发者可以执行迁移、测试、队列工作等操作。然而,artisan的提示信息默认是通用的,有时可能不够直观或友好。幸运的是,Laravel允许我们通过自定义命令行......
  • golang面试题:json包变量不加tag会怎么样?
    问题json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段?怎么答如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。如果变量首字母大写,则为public。不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。加了tag,从str......
  • 变量
    变量局部变量:定义在方法内部或方法的参数列表中。只在定义它们的方法内部可见。必须在使用前初始化。成员变量(也称为字段或属性):定义在类中,但在方法或构造函数之外。属于对象的状态信息,与对象的生命周期相同。可以有默认值,也可以在构造函数或通过赋值进行初始化。......
  • go-zero 自定义中间件的几种方式
    目录1.通过api文件生成并填入具体逻辑定义api生成对应的模板填充中间件逻辑2.在server启动前完成中间件的注册定义中间件:注册到server中首先go-zero已经为我们提供了很多的中间件的实现,但有时难免有需求需要自定义,这里介绍几种自定义的方法,供参考。1.通过api文件生......
  • Java中的变量
    变量目录变量变量的声明变量的分类局部变量成员变量(实例变量)类变量(静态变量)参数变量变量的声明在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:typeidentifier[=value][,identifier[=value]...];格式说明:type--数据类型。identifier--......
  • 【转载】MAVEN环境变量配置及安装及项目配置
    一、配置本机的环境变量   在官网找到maven安装包下载并安装到本机电脑中,本人下载的是3.8.7的。       1.点击开始——设置——系统——高级系统设置——高级——环境变量       在系统环境变量中点击新建  2.编辑系统变量,变量值找到你的maven安装路......