2011-05-25 76 views
0

可能重复:
Autoincrement in Oracle甲骨文自动递增

我在Oracle中一个表,我想使用户ID自动增量.. 一旦我让它自动递增使用序列并尝试插入到表使用过程中,我把我的sample.seq_userid 我如何插入userid?我必须在我的程序中声明吗?

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; 

回答

3

你需要一个序列:上表

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; 
/
+7

严格地说

create sequence seq_user_id start with 1 increment by 1; 

和扳机,你不如果您在INSERT站点中指定了'seq_user_id.NEXTVAL',则需要触发一个触发器例如,在给出的示例中,INSERT INTO sample(user_id,name,age)VALUES(seq_user_id.NEXTVAL,name_in,age_in)'。在INSERT语句中指定序列可能会有性能上的优势,而不是依赖触发器,但与INSERT INTO ... VALUES相比,这些对于INSERT INTO ... SELECT更重要。 – 2011-05-25 17:48:45