Изисква се тригер за вмъкване на данни

Опитвам се да заредя колона с уникален пореден номер всеки път, когато в таблицата се вмъкне ред от данни. Как може да се постигне това?


person user3069865    schedule 26.12.2013    source източник


Отговори (2)


Можете да създадете последователност и след това да използвате последователността nextval във вашите изрази за вмъкване за колоната, която искате да има последователно увеличена стойност.

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

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

person Incognito    schedule 26.12.2013

няма нищо подобно на "auto_increment" или "identity" в Oracle, но ако искате автоматично увеличаване на стойността на вашата колона, можете да използвате 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;
/

Това се постига чрез Trigger и Sequence, когато искате сериализиран номер, който всеки може лесно да прочете/запомни/разбере. Но ако не искате да управлявате колона с идентификатор (като emp_id) по този начин и стойността на тази колона не е много значителна, можете да използвате 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.

person 124    schedule 26.12.2013