Oracle使用序列作为其身份列,如果我们这样说的话。
如果您为表主键设置了序列,则还必须编写触发器,该触发器将Sequence.NextValue或类似值插入到主键字段中。
假设您已经熟悉这个概念,只需查询序列,然后您就会得到答案。在Oracle中非常常见的做法是制作一个函数,该函数将返回一个INT,在函数内部执行INSERT。假设您已正确设置触发器,则可以通过查询来返回序列的值。
以下是一个实例:
CREATE TABLE my_table (
id_my_table INT PRIMARY KEY
description VARCHAR2(100) NOT NULL
)
CREATE SEQUENCE my_table_seq
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
如果您想自己管理自增,可以按照以下步骤进行:
INSERT INTO my_table (
id_my_table,
description
) VALUES (my_table_seq.NEXTVAL, "Some description");
COMMIT;
另一方面,如果您不想关心主键的自增,可以使用触发器来实现。
CREATE OR REPLACE TRIGGER my_table_insert_trg
BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
SELECT my_table_seq.NEXTVAL INTO :NEW.id_my_table FROM DUAL;
END;
然后,当你要插入数据时,只需按照以下方式键入INSERT语句:
INSERT INTO my_table (description) VALUES ("Some other description");
COMMIT;
在执行INSERT操作之后,您可能希望进行以下操作:
SELECT my_table_seq.CURRVAL
或者像这样选择您序列的实际值。
以下是一些有用的链接:
http://www.orafaq.com/wiki/Sequence
http://www.orafaq.com/wiki/AutoNumber_and_Identity_columns
希望这能帮到您!