![]() |
|
Модераторы: LSD |
![]()
|
|
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
Здравствуйте! Извините если вопрос бредовый. Есть ли в Oracle такое понятие как Auto Increment??? если да, то как его назначить какому либо полю?
|
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 7 Всего: 21 |
ИМХО, нет.
Есть альтернатива - sequence, позволяет получать монотонно возрастающую последовательность уникальных номеров. В триггер типа onInsert можно вставить обращение к нужному sequence и полученное значение вставлять в нужное поле. -------------------- Хотите поговорить об этом? |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
Мне лично больше нравиться именно этот подход - легко можно организовать уникальность числа сразу в нескольких таблицах, что бывает иногда удобно.
Если еще наложить условие в виде уникальности этого поля - то просто песня. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Для обеспечения уникальности первичных ключей, Oracle рекомендует sys_guid(). При этом они гарантируют уникальность данных ключей на всех экземплярах Oracle, sys_guid() можно поставить в качестве умолчального значения для столбца и не надо триггеров.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| igon |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 7 Всего: 21 |
В default для поля можно поставить и
sys_guid() - вещь замечательная, особенно если предстоит объединять несколько однотипных баз, но для формирования, скажем, номера заказа, который будет показываться юзеру, явно не подходит - 16 байт, и не меньше!
Значения уникальны, но что каждое следующее будет БОЛЬШЕ (Increment) предыдущего, - не гарантируется. sequence это гарантирует: значения в поле будут возрастать, правда, не обязательно монотонно - могут возникать пропуски номеров, если значение, возвращенное MySequence.next(), не было использовано (например, ROLLBACK после Insert) Это сообщение отредактировал(а) igon - 3.2.2005, 08:28 -------------------- Хотите поговорить об этом? |
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Причем можно считать их уникальными и с SQL Server. Вероятность совпадения больше, но все равно пренебрежимо мала. Во всяком случае у нас коллизий пока не было. P.S. Когда мне нужен сложный пароль я использую sys_guid() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Valdemaras |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Я что то сильно туплю по этому поводу, ибо с ораклом работаю второй день.
Хочу что бы мне по шагам расписали что надо сделать. Я создал последовательность таким образом:
После я в поле default начал прописывать следующее:
оворит что ошибка missing operator таблица из двух столбцов типов number |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
В качестве default значения можно указать любое выражение значение которго имеет тот же тип, что и столбец, у тебя же там не выражение а запрос. Но есть ограничения, нельзя вставлять в выражение функции на PL/SQL и псевдостолбцы nextval, curval и т.д.
Поэтому в данном случае придется делать триггер. Добавлено @ 15:24 И на будущее, пользуйся тегами code. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Valdemaras |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
И как он должен выглядеть? просто я до конца не понимаю сути псевдо столбцов и так далее.
по поводу CODE, спасибо учту! Это сообщение отредактировал(а) Valdemaras - 30.1.2006, 15:31 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Что то типа такого:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Valdemaras |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Спасибо все работает как хотел. Для полного понимания меня интересует название параметра
Его первая часть конечно. Скажите что это, а потом сам почитаю что это. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
В триггерах можно использовать ссылки на старые и новые значения столбцов, старое значение доступно через :OLD.<имя_столбца>, новое :NEW.<имя_столбца>. Но не для всех триггеров, все значения доступны, например для триггера before insert старое значение не доступно, его просто не существует.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |