我正在尝试创建一个表,其中一列将包含自动递增数字。有没有其他方法可以做到这一点,而不是为每一行创建序列?将动态添加/删除行,并且序列需要可重置。
表格应如下所示:
[Foreign_Key] [Sequence_State]
A 0
B 0
C 0
当我打电话给这样的事情时(伪代码):
getNextNumber('A');
getNextNumber('A');
getNextNumber('A');
getNextNumber('B');
getNextNumber('B');
表的状态应改为:
[Foreign_Key] [Sequence_State]
A 3
B 2
C 0
我想我可以使用PL / SQL函数,如果Foreign_Key
不存在则会创建序列,增加并更新Sequence_State
。但这一切似乎有点笨重,我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:0)
我想我已经明白了。正如Bowlturner指出的那样,序列不是必需的(虽然我尝试过它们可以使用)。简单的选择和更新就足够了:
create or replace function getNextNumber(otherid IN VARCHAR2)
return number
is
nextval NUMBER;
entryexists NUMBER(1);
begin
select case
when exists(select * from CURRENT_STATE where OTHER_ID=otherid)
then 1
else 0
end into entryexists
from dual;
if entryexists = 0
then
insert into CURRENT_STATE (OTHER_ID, SEQUENCE_STATE) values (otherid, 1);
nextval := 1;
else
update CURRENT_STATE set SEQUENCE_STATE = SEQUENCE_STATE + 1 where OTHER_ID=otherid
RETURNING SEQUENCE_STATE into nextval;
end if;
return nextval;
end;
/