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自动增量[重复]的主要内容,如果未能解决你的问题,请参考以下文章