• Oracle根据现有序列最大值创建序列DDL(批量)


    1. 需求说明

    dev环境上基础表 数据 (比如菜单/角色/字典等) ,拷贝到test环境或者uat环境;  会有遇到序列不同步的情况。

    2. 解决方法 ( 可直接跳到文末, 有datagrip一秒自动生成序列方式 )

    创建序列脚本带上 已有最大值, 即 : 

    create sequence SEQ_xxx start with 最大值 ;

    3. 脚本

    --  自动读取当前用户下序列最大值并生成创建序列的脚本
    --1. 执行 查询语句, 结果产生一个 [拼接的查询语句], 是 一个拼接的查询语句;
    --2. 执行 [拼接的查询语句],  结果产生一个 [创建序列DDL 语句]
    --3 . 修改 sequence_owner 和  SEQUENCE_NAME 条件 ,一次大概只能 创建40个序列左右
    SELECT
           'select ' || substr(bigsql, 0, (length(bigsql) - 2)) || ' from dual'
    from (
             SELECT rtrim(xmlagg(xmlparse(content sqltmp || '||' wellformed) ORDER BY sqltmp).getclobval(), ',') bigsql
             from (
                      select '  ' || '''' || 'create sequence ' || SEQUENCE_NAME || ' start with  ' || '''||' ||
                             SEQUENCE_NAME || '.nextval  ' || '||' || '''' || ';' || '''' as sqltmp
                      from dba_sequences
                      -- *** 修改下面数据库用户
                      where sequence_owner = 'CS_PLATFORM_ZQ'
                        --  *** 下面指定几个序列测试, 根据需要注释掉
                        and SEQUENCE_NAME in
                           ('SEQ_USER_USER_BASIC', 'SEQ_USER_ROLE_MENU_XW')
                  ) t
             GROUP BY 1) tmmp;

    4. 执行效果

    第一步: (很长的一段sql)

     第二步: 

      复制第一步的执行结果,继续执行(tips: 这里建议先拷贝到txt编辑器, 然后再复制到数据库工具里面; 直接复制到 datagrip的话, 会被编辑器搞乱字符  )

    可以看到 就是需要的创建序列脚本,并带了最大值;

    5. 最简方式

    直接使用datagrip自动生成,步骤如下

     结果: (脚本已经复制了,这时候直接ctrl+v就出来了)

  • 相关阅读:
    BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
    BZOJ 2208: [Jsoi2010]连通数( DFS )
    js效果-鼠标提示框
    CSS-背景
    CSS-文本
    tomcat 安装 for Mac
    CSS选择器基础
    POJ3349-Snowflake Snow Snowflakes-Hash
    数据库的三大设计范式
    HDU5120-Intersection-两个圆环相交面积
  • 原文地址:https://www.cnblogs.com/coloz/p/16194298.html
Copyright © 2020-2023  润新知