我正在为我的一个代码编写启动计划。其中,对于每个步骤,我必须编写一个验证步骤,该步骤将告知是否已正确进行部署/更改。就像有一个alter table命令添加一个新列然后作为验证一样,我将使用 select table_name 作为验证步骤。
我正在寻找我的序列脚本的验证步骤。我的序列脚本正在删除旧序列并在初始值更改时重新创建它。让我们说如果我的最后一次序列是在10071上 - 新的序列将从100710开始。
我写了以下查询
SELECT LAST_NUMBER
FROM all_sequences
WHERE sequence_name = 'SEQNAME';
现在,我的问题是,是否会给出我的新序列或旧序列的最后一个数字?
P.S: 我不能使用序列NextValue - 它会导致系统错过1个数字并且会弄乱整个系统。但是,我对我的* next_value *可以自动执行的选项持开放态度。
答案 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>