使用此Oracle序列定义:
while (c!=s2.charAt(k)) {
k++;
}
是否有保证,此序列将始终返回
正确的号码?
答案 0 :(得分:3)
是的,序列将返回每个数字一次,从100开始,逐步减少到0。
是的,它会按顺序将它们从100减少到0。
正确,不会跳过任何数字。
多个会话?这取决于。
请考虑以下事项:
create table junk ( id number );
CREATE SEQUENCE MY_SPECIAL_COUNTER
START WITH 100
INCREMENT BY -1
MAXVALUE 100
MINVALUE 0
NOCYCLE
NOCACHE
ORDER
;
-- in session 1 do the following:
insert into junk
select my_special_counter.nextval from dual;
insert into junk
select my_special_counter.nextval from dual;
SQL> select * from junk;
ID
----------
100
99
SQL>
-- in session 2 do the following:
insert into junk
select my_special_counter.nextval from dual;
SQL> select * from junk;
ID
----------
98
SQL> commit;
-- in session 1 do the following:
rollback;
-- in session 3 do the following:
SQL> select * from junk;
ID
----------
98
SQL>
正如您所看到的,一旦您引入多个会话,就会发生各种有趣的事情。数字可以“丢失”或“跳过”..请注意,它不是执行此操作的序列,而是会话或任何人拉动序列值然后随后丢弃它(即作业异常终止,回滚,逻辑错误等)
此外,如果会话1首先拉序列,但会话2首先提交,其他人会“认为”会话2插入一个“乱序”的数字..所以要了解你所追求的是什么,我们真的需要了解你的要求进一步提出建议。
然而,这应该有助于您正确理解序列。 :) 祝你好运!