文章目录
- 前言
- 脚本修改表名称
- 修改序列
前言
开发中一次偶然的机会,Oracle 12c 更换为 11g ,需要对表名称的长度和序列长度做限制要求。
11g相对12c而言,
表名称
与序列名称
的长度
,不能超过30个字符
。
在开发中做了更改,在测试环境做了测试验证,脚本ok。
脚本修改表名称
修改表名称,需要使用到Oracle的下面的命令。
alter table
xxx表rename to
xxxx新的名称
写pl/sql脚本的作用是:
并不是每次都需要做更改,只需要符合条件时更改即可。
脚本如下所示:
declarecnt integer ;
beginSELECT COUNT(0)INTO cntFROM USER_ALL_TABLESwhere table_name = upper('xxxx旧表名');
if cnt = 1 thenEXECUTE IMMEDIATE 'alter table xxxx旧表名 RENAME TO xxxx新表名';
end if;
end;
/
修改序列
在oracle中,修改序列虽然也有语法,但是使用plsql进行脚本更新,总会报错。
后来经过验证,只能先删除再新增
。但这么做必须保证一个要素点:
序列的最新值问题。
必须保证不影响业务流程的情况下,尽可能地让序列新增值能够顺延。
脚本如下所示:
-- 序列名称
declarecnt integer ;newseq integer ;v_startnum integer;
beginselect count(0)into cntfrom user_sequenceswhere sequence_name = upper('xxx旧的序列名称');select count(0)into newseqfrom user_sequenceswhere sequence_name = upper('xxxx新的序列名称');
if cnt = 1 thenif newseq = 0 then-- 查询当前数据表的最大记录数 +1 作为新序列的开始数select max(ID)+1into v_startnumfrom SYS_INDICATOR_CONFIG;-- 先删除旧序列EXECUTE IMMEDIATE 'drop sequence xxx旧序列名称 ';-- 创建新序列execute immediate 'create sequence xxxx新序列名称 minvalue 1maxvalue 9999999999999999start with ' ||v_startnum||'increment by 1cache 20';END if;
END if;
end;
/