是否有一个SQL命令来检索不会增加它的序列值。
谢谢。
编辑和结论
正如由Justin洞说这不是有益的尝试“拯救”序列号,以便
select a_seq.nextval from dual;
是不够好,检查序列值。
我仍然保持奥利答案好一个,因为它回答了最初的问题。 但问自己关于不修改,如果你想做到这一点序列的必要性。
是否有一个SQL命令来检索不会增加它的序列值。
谢谢。
编辑和结论
正如由Justin洞说这不是有益的尝试“拯救”序列号,以便
select a_seq.nextval from dual;
是不够好,检查序列值。
我仍然保持奥利答案好一个,因为它回答了最初的问题。 但问自己关于不修改,如果你想做到这一点序列的必要性。
SELECT last_number
FROM all_sequences
WHERE sequence_owner = '<sequence owner>'
AND sequence_name = '<sequence_name>';
你可以得到各种各样的序列元数据的user_sequences
, all_sequences
和dba_sequences
。
这些观点在会话工作。
编辑:
如果序列是在默认模式,则:
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
之前复位,然后返回到其原始值之后,以确保你没有缓存的很多价值观。
select MY_SEQ_NAME.currval from DUAL;
请记住,它只能如果您运行select MY_SEQ_NAME.nextval from DUAL;
在当前的会话。
我原来的答复是事实不正确,我很高兴它已被删除。 下面的代码将以下条件)你知道没有其他人修改的序列b)序列是由您的会话修改下工作。 就我而言,我遇到过类似的问题,我在那里调用一个修改的值的过程,我相信假设是正确的。
SELECT mysequence.CURRVAL INTO v_myvariable FROM DUAL;
可悲的是,如果你没有在你的会话修改的顺序,我相信别人都在说明该NEXTVAL是你唯一的选择是正确的。
这不是一个答案,真的,我会进入它作为一个评论过这个问题没有被锁定。 这个答案:
为什么你会要吗?
假定有一个表与序列作为主键,并且由插入触发器产生的序列。 如果你想有可用于后续更新记录的顺序,你需要有一种方法来提取价值。
为了确保你得到正确的,你可能想换行INSERT和RONK的事务中的查询。
RONK的查询:
select MY_SEQ_NAME.currval from DUAL;
在上述情况下,RONK的警告并没有因为插入应用和更新将在同一会话发生。