存储过程,比较两个表的数据

创建了一个名为prc_liuhaijun01的存储过程,用于比对POL_REG_LCPOLTRANSACTION表与其他四个表(POL_REG_LCBNF, POL_REG_LCCONT, POL_REG_LCPRODINSURELA, POL_REG_LCPRODUCT)的transactionno字段,找出不一致的数据并插入到temp_liuhaijun临时表中。" 126061861,12674255,MySQL唯一约束详解与应用,"['数据库', '后端开发', 'SQL']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  --存储过程
  --POL_REG_LCPOLTRANSACTION分别与POL_REG_LCCONT,POL_REG_LCPRODINSURELA,POL_REG_LCPRODUCT,POL_REG_LCBNF比较
  CREATE OR REPLACE PROCEDURE prc_liuhaijun01 AS
  cnt_a NUMBER;
  cnt_b NUMBER;
  cnt_c number;
  cnt_d number;


  TYPE ab IS RECORD(
    a_transactionno POL_REG_LCPOLTRANSACTION.transactionno%TYPE,
    b_transactionno POL_REG_LCBNF.transactionno%TYPE,
    c_transactionno POL_REG_LCCONT.TRANSACTIONNO%TYPE,
    d_transactionno POL_REG_LCPRODINSURELA.TRANSACTIONNO%TYPE,
    e_transactionno POL_REG_LCPRODUCT.TRANSACTIONNO%TYPE);
  rs ab;
  CURSOR cur IS
    SELECT *
      FROM (SELECT a.transactionno AS a_transactionno,
                   b.transactionno AS b_transactionno,
                   c.transactionno AS c_transactionno,
                   d.transactionno AS d_transactionno,
                   e.transactionno AS e_transactionno
              FROM (SELECT transactionno FROM POL_REG_LCPOLTRANSACTION) a
               full join (SELECT transactionno FROM POL_REG_LCBNF) b
                ON a.transactionno = b.transactionno
             full join (SELECT transactionno FROM POL_REG_LCCONT) c
                ON a.transactionno = c.transactionno
              full join (SELECT transactionno FROM POL_REG_LCPRODINSURELA) d
                ON a.transactionno = d.transactionno
               full join (SELECT transactionno FROM POL_REG_LCPRODUCT) e
                ON a.transactionno = e.transactionno)
     WHERE a_transactionno IS NULL
        OR b_transactionno IS NULL
        OR c_transactionno IS NULL
        OR d_transactionno IS NULL
        OR e_transactionno IS NULL;
BEGIN
  OPEN cur;
  LOOP
    FETCH cur
      INTO rs;
    EXIT WHEN cur%NOTFOUND;
  
    IF rs.a_transactionno IS NOT NULL AND rs.b_transactionno IS NULL THEN
      BEGIN
        SELECT Count(1)
          INTO cnt_b
          FROM POL_REG_LCBNF
         WHERE transactionno = rs.a_transactionno;
      EXCEPTION
        WHEN OTHERS THEN
          cnt_b := 0;
      END;
      IF cnt_b = 0 THEN
        INSERT INTO temp_liuhaijun
        VALUES
          (rs.a_transactionno, 'POL_REG_LCBNF', 22, '');
      END IF;
    END IF;
    IF rs.a_transactionno IS NOT NULL AND rs.c_transactionno IS NULL THEN
      BEGIN
        SELECT Count(1)
          INTO cnt_a
          FROM POL_REG_LCCONT
         WHERE transactionno = rs.a_transactionno;
      EXCEPTION
        WHEN OTHERS THEN
          cnt_a := 0;
      END;
      IF cnt_a = 0 THEN
        INSERT INTO temp_liuhaijun
        VALUES
          (rs.a_transactionno, 'POL_REG_LCCONT', 22, '');
      END IF;
    END IF;
    IF rs.a_transactionno IS NOT NULL AND rs.d_transactionno IS NULL THEN
      BEGIN
        SELECT Count(1)
          INTO cnt_c
          FROM POL_REG_LCPRODINSURELA
         WHERE transactionno = rs.a_transactionno;
      EXCEPTION
        WHEN OTHERS THEN
          cnt_c := 0;
      END;
      IF cnt_c = 0 THEN
        INSERT INTO temp_liuhaijun
        VALUES
          (rs.a_transactionno, 'POL_REG_LCPRODINSURELA', 22, '');
      END IF;
    END IF;
    IF rs.a_transactionno IS NOT NULL AND rs.e_transactionno IS NULL THEN
      BEGIN
        SELECT Count(1)
          INTO cnt_d
          FROM POL_REG_LCPRODUCT
         WHERE transactionno = rs.e_transactionno;
      EXCEPTION
        WHEN OTHERS THEN
          cnt_d := 0;
      END;
      IF cnt_d = 0 THEN
        INSERT INTO temp_liuhaijun
        VALUES
          (rs.a_transactionno, 'POL_REG_LCPRODUCT', 22, '');
      END IF;
    END IF;
  END LOOP;
  commit;
  CLOSE cur;
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值