编写PL / SQL序列的验证步骤

时间:2011-09-27 20:07:28

标签: oracle plsql oracle11g sequence

我正在为我的一个代码编写启动计划。其中,对于每个步骤,我必须编写一个验证步骤,该步骤将告知是否已正确进行部署/更改。就像有一个alter table命令添加一个新列然后作为验证一样,我将使用 select table_name 作为验证步骤。

我正在寻找我的序列脚本的验证步骤。我的序列脚本正在删除旧序列并在初始值更改时重新创建它。让我们说如果我的最后一次序列是在10071上 - 新的序列将从100710开始。

我写了以下查询

SELECT LAST_NUMBER 
  FROM all_sequences 
 WHERE sequence_name = 'SEQNAME';

现在,我的问题是,是否会给出我的新序列或旧序列的最后一个数字?

P.S: 我不能使用序列NextValue - 它会导致系统错过1个数字并且会弄乱整个系统。但是,我对我的* next_value *可以自动执行的选项持开放态度。

2 个答案:

答案 0 :(得分:0)

  

现在,我的问题是,是否会给出我的新序列或旧序列的最后一个数字?

错误......为什么不按照兰迪在评论中的建议尝试呢?

SQL> !cat /tmp/sql.sql

create sequence foo start with 10;

select min_value, max_value, increment_by, last_number
from user_sequences
where sequence_name = 'FOO';

drop sequence foo;

create sequence foo start with 20;

select min_value, max_value, increment_by, last_number 
from user_sequences 
where sequence_name = 'FOO';

drop sequence foo;

SQL> @/tmp/sql

Sequence created.


 MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER
---------- ---------- ------------ -----------
         1 1.0000E+28            1          10


Sequence dropped.


Sequence created.


 MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER
---------- ---------- ------------ -----------
         1 1.0000E+28            1          20


Sequence dropped.

SQL>

答案 1 :(得分:0)

如果序列使用缓存(默认值)

LAST_NUMBER将不准确

SQL> CREATE SEQUENCE seq_1;

Sequence created.

SQL>
SQL> SELECT seq_1.nextval FROM dual;

   NEXTVAL
----------
         1

SQL>
SQL> SELECT sequence_name,
  2         min_value,
  3         last_number
  4  FROM user_sequences
  5  WHERE sequence_name = 'SEQ_1';

SEQUENCE_NAME                   MIN_VALUE LAST_NUMBER
------------------------------ ---------- -----------
SEQ_1                                   1          21

SQL>
SQL> SELECT seq_1.nextval FROM dual;

   NEXTVAL
----------
         2

SQL>
SQL> SELECT sequence_name,
  2         min_value,
  3         last_number
  4  FROM user_sequences
  5  WHERE sequence_name = 'SEQ_1';

SEQUENCE_NAME                   MIN_VALUE LAST_NUMBER
------------------------------ ---------- -----------
SEQ_1                                   1          21

SQL>