【问题标题】:Oracle auto increment [duplicate]Oracle自动增量[重复]
【发布时间】: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;

【问题讨论】:

    标签: oracle auto-increment procedure


    【解决方案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 更重要。
    猜你喜欢
    • 2014-03-18
    • 2013-11-19
    • 2012-04-01
    • 2014-05-08
    • 1970-01-01
    • 2016-04-04
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多