есть такое понятие...?

 
0
 
Oracle
ava
Wanderer2019 | 01.02.2005, 14:00
Здравствуйте! Извините если вопрос бредовый. Есть ли в Oracle такое понятие как Auto Increment??? если да, то как его назначить какому либо полю?
Comments (11)
ava
igon | 02.02.2005, 01:58 #
ИМХО, нет.
Есть альтернатива - sequence, позволяет получать монотонно возрастающую последовательность уникальных номеров. В триггер типа onInsert можно вставить обращение к нужному sequence и полученное значение вставлять в нужное поле.
ava
AntonSaburov | 02.02.2005, 17:30 #
Мне лично больше нравиться именно этот подход - легко можно организовать уникальность числа сразу в нескольких таблицах, что бывает иногда удобно.

Если еще наложить условие в виде уникальности этого поля - то просто песня.
ava
LSD | 02.02.2005, 22:24 #
Для обеспечения уникальности первичных ключей, Oracle рекомендует sys_guid(). При этом они гарантируют уникальность данных ключей на всех экземплярах Oracle, sys_guid() можно поставить в качестве умолчального значения для столбца и не надо триггеров.
ava
igon | 03.02.2005, 08:27 #
Цитата
sys_guid() можно поставить в качестве умолчального значения для столбца и не надо триггеров

В default для поля можно поставить и

select MySequence.next() from dual
smile
sys_guid() - вещь замечательная, особенно если предстоит объединять несколько однотипных баз, но для формирования, скажем, номера заказа, который будет показываться юзеру, явно не подходит - 16 байт, и не меньше! smile


      7CD5B7769DF75CEFE034080020825436
      7CD5B7769DF85CEFE034080020825436
      7CD5B7769DF95CEFE034080020825436
      7CD5B7769DFA5CEFE034080020825436

Значения уникальны, но что каждое следующее будет БОЛЬШЕ (Increment) предыдущего, - не гарантируется.
sequence это гарантирует: значения в поле будут возрастать, правда, не обязательно монотонно - могут возникать пропуски номеров, если значение, возвращенное MySequence.next(), не было использовано (например, ROLLBACK после Insert)
ava
LSD | 03.02.2005, 21:24 #
Цитата (igon @ 3.2.2005, 08:27)
Значения уникальны, но что каждое следующее будет БОЛЬШЕ (Increment) предыдущего, - не гарантируется.

Причем можно считать их уникальными и с SQL Server. Вероятность совпадения больше, но все равно пренебрежимо мала. Во всяком случае у нас коллизий пока не было.

P.S. Когда мне нужен сложный пароль я использую sys_guid() smile
ava
Valdemaras | 30.01.2006, 15:10 #
Я что то сильно туплю по этому поводу, ибо с ораклом работаю второй день.
Хочу что бы мне по шагам расписали что надо сделать.
Я создал последовательность таким образом:

CREATE SEQUENCE TabNoSeq INCREMENT BY 1


После я в поле default начал прописывать следующее:

ALTER TABLE TAB 
MODIFY (
ID DEFAULT select TabNoSeq.nextval() from dual
)
/

оворит что ошибка missing operator

таблица из двух столбцов типов number
ava
LSD | 30.01.2006, 15:23 #
В качестве default значения можно указать любое выражение значение которго имеет тот же тип, что и столбец, у тебя же там не выражение а запрос. Но есть ограничения, нельзя вставлять в выражение функции на PL/SQL и псевдостолбцы nextval, curval и т.д.

Поэтому в данном случае придется делать триггер.
added later:
И на будущее, пользуйся тегами code.
ava
Valdemaras | 30.01.2006, 15:30 #
И как он должен выглядеть? просто я до конца не понимаю сути псевдо столбцов и так далее.

по поводу CODE, спасибо учту!
ava
LSD | 30.01.2006, 15:38 #
Что то типа такого:
create or replace trigger TAB_PK_TRG
before insert on TAB
for each row
begin
select TABNOSEQ.NEXTVAL into :NEW.ID from dual;
end TAB_PK_TRG;
ava
Valdemaras | 31.01.2006, 10:13 #
Спасибо все работает как хотел. Для полного понимания меня интересует название параметра

:NEW.ID

Его первая часть конечно. Скажите что это, а потом сам почитаю что это.
ava
LSD | 31.01.2006, 10:55 #
В триггерах можно использовать ссылки на старые и новые значения столбцов, старое значение доступно через :OLD.<имя_столбца>, новое :NEW.<имя_столбца>. Но не для всех триггеров, все значения доступны, например для триггера before insert старое значение не доступно, его просто не существует.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit