Oracle自动增量[重复]

Posted

技术标签:

【中文标题】Oracle自动增量[重复]【英文标题】:Oracle auto increment [duplicate] 【发布时间】:2011-09-01 22:16:42 【问题描述】:

可能重复:Autoincrement in Oracle

我在 oracle 中有一个表,我想让用户 ID 自动递增.. 一旦我通过使用序列使其自动递增并尝试使用过程插入表中,我将在哪里放置我的 sample.seq_userid 我如何插入用户ID?我必须在我的程序中声明它吗?

 PROCEDURE insertExample
  (
    name_in IN sample.name%TYPE,
    age_in IN sample.age%TYPE
  )
  IS

  BEGIN

    INSERT INTO sample
    (name, age)
    VALUES
    (name_in, age_in);

  END insertExample;

这是我的更新

PROCEDURE updateExample
  (
    userid_in IN sample.userid%TYPE,
    name_in IN sample.name%TYPE,
    age_in IN sample.age%TYPE
  )
  IS

  BEGIN

    UPDATE sample
       SET name = name_in,
           age = age_in
    WHERE userid = userid_in;


  END updateExample;

【问题讨论】:

【参考方案1】:

你需要一个序列:

create sequence seq_user_id start with 1 increment by 1;

还有一个表上的触发器

CREATE TRIGGER user_id_trg 
   BEFORE insert 
   ON sample 
   FOR EACH ROW
BEGIN
      SELECT seq_user_id.NEXTVAL INTO :new.user_id FROM dual;

END;
/

【讨论】:

严格来说,如果在 INSERT 语句中指定seq_user_id.NEXTVAL,则不需要触发器,例如给出的示例中的INSERT INTO sample (user_id, name, age) VALUES (seq_user_id.NEXTVAL, name_in, age_in)。在 INSERT 语句中指定序列而不是依赖触发器可能会带来性能优势,但使用INSERT INTO...SELECT 可能比使用INSERT INTO...VALUES 更重要。

以上是关于Oracle自动增量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 通过简单查询显示增量 ID [重复]

oracle DB 中的自动增量替代方案

修复自动增量mysql [重复]

如何创建第二个主列(自动增量)[重复]

如何在ms访问中重置自动增量字段[重复]

PHP - 如何使用自动增量更新表(值++)[重复]