文章目录
- 前言
- 脚本修改表名称
- 修改序列
前言
开发中一次偶然的机会,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进行脚本更新,总会报错。
后来经过验证,只能先删除再新增
。但这么做必须保证一个要素点:
序列的最新值问题。
必须保证不影响业务流程的情况下,尽可能地让序列新增值能够顺延。
脚本如下所示:
-- 序列名称
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;
/