插入数据所需的触发器

时间:2013-12-26 09:41:30

标签: oracle plsql sequences

每次在表格中输入一行数据时,我都会尝试加载一个具有唯一序列号的列。如何实现?

2 个答案:

答案 0 :(得分:0)

您可以创建Sequence,然后在插入语句中使用序列nextval,以获得要具有连续递增值的列。

CREATE SEQUENCE seq
INCREMENT BY 1
      START WITH 1
      NOMAXVALUE
      NOCYCLE
      CACHE 10;

INSERT INTO tab VALUES (seq.nextval, col1, col2, col3);

答案 1 :(得分:0)

Oracle中没有类似“auto_increment”或“identity”的内容, 但如果您希望在列值中自动增加,则可以使用Sequence来实现此目的。

创建序列后,您可以使用After Insert Trigger插入相同的值。 这是触发器示例...

CREATE OR REPLACE TRIGGER dep_ins_trig 
BEFORE INSERT ON <table_name> 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

当您需要任何人都可以轻松阅读/记住/理解的序列号时,TriggerSequence即可实现此目的。但是如果你不想通过这种方式管理ID列(比如emp_id),并且这个列的值不是很大,你可以在Table Creation中使用SYS_GUID()来获得这样的自动增量。

CREATE TABLE <table_name> 
(emp_id RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
name VARCHAR2(30));

现在,您的emp_id列将接受“全球唯一标识符值”。 您可以通过忽略emp_id列来在表中插入值。

INSERT INTO <table_name> (name) VALUES ('name value');

因此,它会为您的emp_id列插入唯一值。