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就出来了)