Oracle 序列(Sequence)主要用于生成主键。但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。
1.先删除序列,然后重新创建。不过这不是当前要讲的重点。这个方法比较方便。
2.通过Increment By来实现修改初始值。
例如:若序列名称是BASE_LOG_SEQ,初始值是12,而现在要设置初始值为1024,Increment By值为:1012(1024-12)
-- 如下三步骤完成... ; Select BASE_LOG_SEQ.nextval FROM dual; ;
Java 调用 Hibernate API实现
// 由于Oracle不支持 alert sequence seqName start with 1; 这种形式,故采用曲线形式 BigDecimal incrementNo = new BigDecimal(seq.getColumnsMax()).subtract(new BigDecimal(seq.getSeqNext())); // 步骤1 String sql1 = "ALTER SEQUENCE "+ seq.getSeqName() + " Increment By "+ incrementNo.longValue() ; super.getCurrentSession().createSQLQuery(sql1).executeUpdate(); //步骤2 String sql2 =" SELECT "+seq.getSeqName()+".nextval from dual "; super.getCurrentSession().createSQLQuery(sql2).list(); //步骤3 String sql3 = "ALTER SEQUENCE "+ seq.getSeqName() + " Increment By 1 " ; super.getCurrentSession().createSQLQuery(sql3).executeUpdate();