середа, 10 березня 2010 р.

Створення auto increment для стовпця в Oracle

В Oracle не має стандартної властивості для виконання описаного в темі завдання. Але це можна реалізувати за допомогою декількох команд.


Спочатку потрібно створити таблицю:
create table incr
(
id number not null primary key,
aname varchar2(50)
)
Поле id має автоматично збільшуватися на певне значення.
для цього потрібно створити sequence:
create sequence incr_sq 
start with 1 
increment by 1;
В принципі цього може вистачити.
Для вставки значень в таблицю потрібно написати такий код:
insert into incr values (incr_sq.nextval,'Петро'); 
insert into incr values (incr_sq.nextval,'Іван');
А можна піти далі і свторити триггер:
CREATE OR REPLACE TRIGGER incr_trigger
BEFORE INSERT
ON incr
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT incr_sq.nextval INTO :NEW.ID FROM dual;
END;
Після створення триггеру вставка значень в таблицю виглядатиме наступним чином:
insert into incr (aname) values ('Степан');
insert into incr (aname) values ('Микола');
Можна замість попередніх рядків й написати:
insert into incr values (8,'Степан'); 
insert into incr values (7,'Степан');
Але в результаті запиту значення id всеодно буде рівним 3 і 4.

Щоб вносилися значення з попереднього інсерту потрібно трохи змінити триггер, а саме:
CREATE OR REPLACE TRIGGER incr_trigger
BEFORE INSERT
ON incr
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
if :new.id is null then
 SELECT incr_sq.nextval INTO :NEW.ID FROM dual;
end if;
END;

Немає коментарів:

Дописати коментар