Написание шагов проверки для PL / SQL Sequence - PullRequest
0 голосов
/ 28 сентября 2011

Я пишу план запуска одного из моих кодов.В котором для каждого шага я должен написать шаг проверки, который скажет, правильно ли было выполнено развертывание / изменение.Например, если есть команда изменить таблицу для добавления нового столбца, то в качестве проверки я бы использовал выбор столбца_имя из таблицы в качестве шага проверки.

Я ищу шаг проверки длямой сценарий последовательности.Мои сценарии последовательности удаляют старую последовательность и воссоздают ее с измененным значением initial .скажем, если бы мой последний secece был на 10071 - новый sequece начинался бы с 100710.

Я написал следующий запрос

SELECT LAST_NUMBER 
  FROM all_sequences 
 WHERE sequence_name = 'SEQNAME';

Теперь мой вопрос, это даст последний номермоей новой последовательности или старой последовательности?

PS: я не могу использовать последовательность NextValue - это приведет к тому, что система пропустит 1 номер и испортит всю систему.Тем не менее, я открыт для опций, в которых мое * next_value * может быть автоматически отменено.

Ответы [ 2 ]

0 голосов
/ 03 октября 2011

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>
0 голосов
/ 28 сентября 2011

Теперь, мой вопрос, даст ли это последний номер моей новой последовательности или старой последовательности?

Э-э-э ... Почему бы просто не попробовать, как предложил Рэнди вкомментарии?

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>
...