Flyway——修改表名称与序列名称

文章目录

  • 前言
  • 脚本修改表名称
  • 修改序列

前言

开发中一次偶然的机会,Oracle 12c 更换为 11g ,需要对表名称的长度和序列长度做限制要求。

11g相对12c而言,表名称序列名称长度不能超过30个字符

在开发中做了更改,在测试环境做了测试验证,脚本ok。

脚本修改表名称

修改表名称,需要使用到Oracle的下面的命令。

alter table xxx表 rename to xxxx新的名称

写pl/sql脚本的作用是:

并不是每次都需要做更改,只需要符合条件时更改即可。

脚本如下所示:

declare
    cnt integer ;
begin
    SELECT COUNT(0)
        INTO cnt
    FROM USER_ALL_TABLES
    where table_name = upper('xxxx旧表名');
if cnt = 1 then
    EXECUTE IMMEDIATE 'alter table xxxx旧表名 RENAME TO xxxx新表名';
end if;
end;
/

修改序列

在oracle中,修改序列虽然也有语法,但是使用plsql进行脚本更新,总会报错。
Flyway——修改表名称与序列名称_第1张图片
后来经过验证,只能先删除再新增。但这么做必须保证一个要素点:

序列的最新值问题。
必须保证不影响业务流程的情况下,尽可能地让序列新增值能够顺延。

脚本如下所示:

-- 序列名称
declare
    cnt integer ;
    newseq integer ;
    v_startnum integer;
begin
    select count(0)
        into cnt
    from user_sequences
    where sequence_name = upper('xxx旧的序列名称');

    select count(0)
        into newseq
    from user_sequences
    where sequence_name = upper('xxxx新的序列名称');
if cnt = 1 then
    if newseq = 0 then
        -- 查询当前数据表的最大记录数  +1  作为新序列的开始数
        select max(ID)+1
               into v_startnum
        from SYS_INDICATOR_CONFIG;

        -- 先删除旧序列
        EXECUTE IMMEDIATE 'drop sequence xxx旧序列名称 ';

        -- 创建新序列
        execute immediate 'create sequence xxxx新序列名称 minvalue 1
            maxvalue 9999999999999999
            start with ' ||v_startnum||
            'increment by 1
            cache 20';
    END if;
END if;
end;
/

你可能感兴趣的:(flyway,oracle,flyway)