zoukankan      html  css  js  c++  java
  • merge语句导致序序爆增

    测试
    每次执行时,都会增merge出
    create table tabx as select * from dba_objects;
    create sequence pub_seq ;
     
    merge into tabx t1
    using tabx t2 on (t1.object_id=t2.object_id)
    WHEN MATCHED THEN
    update set t1.owner = t2.owner
    WHEN NOT MATCHED THEN
    INSERT (object_id)
    VALUES(pub_seq.currval);
     
    select pub_seq.curval from dual;
     
    原因
    未知BUG。
    可能是merger总是作为整句执行,即使只执行update分枝,也会处理insert分枝中的nextval函数(包一层成自定义函数就不会?)。
    即每次merge执行,序列都新增merge结果的条数。
     
     
    解决方法
    且一个函数包一下序列,让其真正执行时才动到nextval
    CREATE OR REPLACE FUNCTION get_sequence(in_sequence  varchar2) RETURN number
    IS
      /*====================================================================*/
      /* FUNCTION    : get_sequence
      /* Description : 根据传递进来的序列名为该序列产生唯一值,以解决MERGE INTO带来的序列自增长的问题
      /* Parameters  : in_sequence            序列名称
      /* Version     : 1.0                    --初始版本
      /*
      /*====================================================================*/
      next_val         number;
    BEGIN
      execute immediate 'SELECT '||in_sequence||'.nextval FROM dual' INTO next_val;
     RETURN next_val;
    EXCEPTION
      WHEN others THEN
       raise_application_error(SQLCODE,SQLERRM);
    END;
  • 相关阅读:
    DVWA 通关指南:File Upload(文件上传)
    DVWA 通关指南:File Inclusion(文件包含)
    DVWA 通关指南:Command Injection (指令注入)
    DVWA 通关指南:Brute Force (爆破)
    CTF-WEB:Git 源码泄露
    2021.1.16 人月神话阅读笔记01
    2021.1.15 HTML基本知识
    2021.1.13
    2021.1.11
    2021.1.8 GitHub注册
  • 原文地址:https://www.cnblogs.com/laverne/p/12625675.html
Copyright © 2011-2022 走看看