由于迁移数据的原因需要修改oracle的序列问题,但是直接修改,无法修改,所以想到一个笨方法先删除再新增一个新的,没想到竟然成功了。
具体逻辑是 传入两个参数(table_name char, seq_name char)一个是表明,一个是序列名。
然后根据序列名删除序列, 然后拿到该表id的最大值进行加1,赋值给定义变量(注意的是需要用一个VARCHAR2来接,然后再转成number类型,因为创建sequence的语句只识别数字)
下面有一个抛出异常的操作,是因为如果这个表是个空表就会报错(无效数字)
所以只要一抛异常就把序列定为1(还有更好的操作,毕竟刚写,慢慢再完善);
CREATE OR REPLACE
PROCEDURE pro_rebuld_sequence(table_name char, seq_name char) authid current_user
AS
v_sqlnumber number(10,0);
v_sqlfalg VARCHAR2(100);
BEGIN
execute immediate 'DROP SEQUENCE ' || seq_name ;
begin
v_sqlfalg :='SELECT max(id)+1 from '||table_name;
execute immediate v_sqlfalg into v_sqlnumber;
execute immediate 'CREATE SEQUENCE '||seq_name||' START WITH '||v_sqlnumber;
exception
/*抛出异常的话,把该序列修改为1*/
when INVALID_NUMBER then
execute immediate 'CREATE SEQUENCE '||seq_name||' START WITH 1 ';
end;
END;