Oracle中的自动增量列

时间:2014-08-07 15:30:53

标签: sql oracle auto-increment

我正在尝试创建一个表,其中一列将包含自动递增数字。有没有其他方法可以做到这一点,而不是为每一行创建序列?将动态添加/删除行,并且序列需要可重置。

表格应如下所示:

[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。但这一切似乎有点笨重,我想知道是否有更好的方法来做到这一点。

1 个答案:

答案 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;
/