我需要一个特定的业务场景,在一个实体(而不是PK)上设置一个序列中的数字(序列必须是最小值和最大值之间的数字)
我定义了这样的序列:
CREATE SEQUENCE MySequence
MINVALUE 65536
MAXVALUE 4294967296
START WITH 65536
INCREMENT BY 1
CYCLE
NOCACHE
ORDER;
Run Code Online (Sandbox Code Playgroud)
在Java代码中,我从序列中检索数字,如下所示:
select mySequence.nextval from dual
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如果我select mySequence.nextval from dual在事务中调用此" "并且在另一个事务中同时调用相同的方法(并行请求),则确定序列返回的值是否不同?
是不是可以从第一个事务中读取未提交的值?
因为假设我没有使用序列和普通表,我将增加序列,然后如果trasactinalitY是默认的"READ COMMITTED",则事务2将能够读取相同的值.
以下是使用的序列创建语法:
CREATE SEQUENCE BD_ID_SEQ AS INTEGER
START WITH 999
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
NO CYCLE;
Run Code Online (Sandbox Code Playgroud)
我有一个包含以下值记录的表:
b_id ------- 2547 NULL 2800 NULL NULL NULL NULL
我执行以下操作:
select case
when b_id is NULL then cast((select next value for bd_id_seq) as character varying(10))
else b_id
end b_id
from table1;
Run Code Online (Sandbox Code Playgroud)
结果是:
b_id ------- 2547 1000 2800 1000 1000 1000 1000
我在期待:
2547 1000 2800 1001 1002 1003 1004
任何想法为什么在case语句中序列似乎没有增加超过第一个值?谢谢,金妮
有以下sql,最后一行出错, ERROR: sequence must have same owner as table it is linked to [Failed SQL: (0) ALTER SEQUENCE test_table_seq OWNED BY test_table.id
CREATE SEQUENCE test_table_seq;
ALTER TABLE test_table ALTER COLUMN id SET DEFAULT nextval('test_table_seq');
ALTER TABLE test_table ALTER COLUMN id SET NOT NULL;
ALTER SEQUENCE test_table_seq OWNED BY test_table.id;
Run Code Online (Sandbox Code Playgroud)
任何建议如何避免该错误?谢谢!!!!