Опитвам се да заредя колона с уникален пореден номер всеки път, когато в таблицата се вмъкне ред от данни. Как може да се постигне това?
Изисква се тригер за вмъкване на данни
Отговори (2)
Можете да създадете последователност и след това да използвате последователността nextval във вашите изрази за вмъкване за колоната, която искате да има последователно увеличена стойност.
CREATE SEQUENCE seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
INSERT INTO tab VALUES (seq.nextval, col1, col2, col3);
няма нищо подобно на "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
.