oracle修改sequence(序列)的存储过程

由于迁移数据的原因需要修改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;

猜你喜欢

转载自blog.csdn.net/hzy_java/article/details/81236758