是否有SQL指令来检索不递增的序列值.

谢谢

EDIT AND CONCLUSION

正如贾斯汀·凯夫所说,试图"保存"序列号是没有用的

select a_seq.nextval from dual;

足以判断序列值.

我仍然认为奥利的答案是好的,因为它回答了最初的问题.但是问问自己,如果你想做的话,有没有必要不修改序列.

推荐答案

SELECT last_number
  FROM all_sequences
 WHERE sequence_owner = '<sequence owner>'
   AND sequence_name = '<sequence_name>';

可以从user_sequencesall_sequencesdba_sequences中获得各种序列元数据.

这些视图适用于不同的会话.

EDIT:

如果序列在默认模式中,则:

SELECT last_number
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

如果您想要所有元数据,那么:

SELECT *
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

希望对你有帮助...

EDIT2:

如果缓存大小不为1,则可以通过一种冗长的方式更可靠地执行此操作:

SELECT increment_by I
  FROM user_sequences
 WHERE sequence_name = 'SEQ';

      I
-------
      1

SELECT seq.nextval S
  FROM dual;

      S
-------
   1234

-- Set the sequence to decrement by 
-- the same as its original increment
ALTER SEQUENCE seq 
INCREMENT BY -1;

Sequence altered.

SELECT seq.nextval S
  FROM dual;

      S
-------
   1233

-- Reset the sequence to its original increment
ALTER SEQUENCE seq 
INCREMENT BY 1;

Sequence altered.

只是要注意,如果其他人在这段时间使用序列,他们(或你)可能会

ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated

此外,您可能希望在重置之前将缓存设置为NOCACHE,然后在重置之后返回其原始值,以确保没有缓存很多值.

Sql相关问答推荐

按CTE创建任务表

如何简化此表达以使搜索查询忽略标点符号?Microsoft Access 2007-2016

SQL计数所有值在联接范围内的行

SUM(条件)在Oracle?

Group By子句返回太多行

为什么postgres中CURRENT_TIMESTAMP的日期与CURRENT_DATE不同?

当我们加入两个表时,我们可以省略GROUP BY中的列名吗?

SQL:如何查找聚合满足条件的连续日期

如何用客户名称计算sum(dr)和sum(cr)

比较SQL中以逗号分隔的字符串

优化Postgres搜索未知长度的子串

使用递归CTE在BigQuery中获取文件路径

无法访问级联删除导致的触发器中已删除的外键记录

在 PostgreSQL 中生成时间序列查询

根据标识符将两行合并为一行

如何在Hive SQL中分别按多列进行分组?

使用多个数据库调用重载 CQRS 模式

SQL的左连接在多对多关系情况下使用

如何根据与 BigQuery 中另一个表的匹配更新一个表中的列?

连续几天购买的客户