Как получить значения всех последовательностей с помощью currval?
В примере: есть 3 последовательности (
seq1, seq2, seq3
) и я хотел бы сделать один запрос, показывающий их имя и их текущее значение?
Основной синтаксис:
select schema.seq_name.currval from dual
Но как показать ценность их всех?
2 ответа
Вы можете использовать user_sequences
представление словаря данных, например
SELECT s.sequence_name, s.last_number AS curr_value
FROM user_sequences s
WHERE s.sequence_name IN ('SEQ1','SEQ2','SEQ3')
пока эти последовательности находятся в вашей текущей схеме. В противном случае это может быть заменено на
all_sequences
или
dba_sequences
в зависимости от ситуации или ваших потребностей.
Несмотря на мои глубокие сомнения относительно того, зачем вам вообще это нужно, я попытался собрать процедуру pl/sql в качестве демонстрации - отчасти просто для того, чтобы бросить вызов самому себе. Когда я столкнулся с проблемой, которая, как я думал, будет простой, мне просто нужно взглянуть на нее свежим взглядом, я разместил сообщение в OTN. В то время как они обращались к моей проблеме с кодированием, один ответ резюмировал вашу проблему:
вы не можете выбрать currval без вызова nextval. currval - это функция, которая возвращает последнее использованное значение последовательности через функцию nextval в вашем сеансе.