Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. create table test(id number);
  2.  
  3. /* sequence - это объект базы данных,
  4. который генерирует целые числа в соответствии с
  5. правилами, установленными во время его создания. */
  6. create sequence test_sq start with 1;
  7.  
  8. /* Получить следуйщий id */
  9. insert into test values(test_sq.nextval);
  10. commit;
  11.  
  12. SQL> select max(id)+1 from animal;
  13.  
  14. MAX(ID)+1
  15. ----------
  16. 6
  17.  
  18. SQL> insert into animal (id, LAST_NAME, FIRST_NAME) values (6, 'test', 'test');
  19.  
  20. 1 row created.
  21.  
  22. SQL> select max(id)+1 from animal;
  23.  
  24. MAX(ID)+1
  25. ----------
  26. 7
  27.  
  28. SQL> commit;
  29.  
  30. Commit complete.
  31.  
  32. SQL> select max(id)+1 from animal;
  33.  
  34. MAX(ID)+1
  35. ----------
  36. 7
  37.  
  38. -- подходит в случае маленьких транзакций
  39. -- (да это небезопасно! да это долго, да это еще 1 вариант )
  40. select nvl (max(tt.id)+1, 0) from test tt;
  41.  
  42. -- тоже самое с использованием триггера
  43. -- (да это небезопасно! да это долго, да это еще 1 вариант )
  44. create or replace trigger test_autoincrement
  45. before insert on test
  46. for each row
  47. begin
  48. select nvl (max(tt.id)+1, 0) into :new.id from test tt;
  49. end;
  50.  
  51. -- триггер с использованием sequence (имхо наиболее оптимальный выбор)
  52. create or replace trigger test_autoincrement
  53. before insert on test
  54. for each row
  55. begin
  56. select test_sq.nextval into :new.id from dual;
  57. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement