Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create table test(id number);
- /* sequence - это объект базы данных,
- который генерирует целые числа в соответствии с
- правилами, установленными во время его создания. */
- create sequence test_sq start with 1;
- /* Получить следуйщий id */
- insert into test values(test_sq.nextval);
- commit;
- SQL> select max(id)+1 from animal;
- MAX(ID)+1
- ----------
- 6
- SQL> insert into animal (id, LAST_NAME, FIRST_NAME) values (6, 'test', 'test');
- 1 row created.
- SQL> select max(id)+1 from animal;
- MAX(ID)+1
- ----------
- 7
- SQL> commit;
- Commit complete.
- SQL> select max(id)+1 from animal;
- MAX(ID)+1
- ----------
- 7
- -- подходит в случае маленьких транзакций
- -- (да это небезопасно! да это долго, да это еще 1 вариант )
- select nvl (max(tt.id)+1, 0) from test tt;
- -- тоже самое с использованием триггера
- -- (да это небезопасно! да это долго, да это еще 1 вариант )
- create or replace trigger test_autoincrement
- before insert on test
- for each row
- begin
- select nvl (max(tt.id)+1, 0) into :new.id from test tt;
- end;
- -- триггер с использованием sequence (имхо наиболее оптимальный выбор)
- create or replace trigger test_autoincrement
- before insert on test
- for each row
- begin
- select test_sq.nextval into :new.id from dual;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement