Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> есть такое понятие...? 
:(
    Опции темы
Wanderer2019
Дата 1.2.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: нет
Всего: 17



Здравствуйте! Извините если вопрос бредовый. Есть ли в Oracle такое понятие как Auto Increment??? если да, то как его назначить какому либо полю?
PM ICQ MSN   Вверх
igon
Дата 2.2.2005, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 7
Всего: 21



ИМХО, нет.
Есть альтернатива - sequence, позволяет получать монотонно возрастающую последовательность уникальных номеров. В триггер типа onInsert можно вставить обращение к нужному sequence и полученное значение вставлять в нужное поле.


--------------------
Хотите поговорить об этом?
PM   Вверх
AntonSaburov
Дата 2.2.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 118



Мне лично больше нравиться именно этот подход - легко можно организовать уникальность числа сразу в нескольких таблицах, что бывает иногда удобно.

Если еще наложить условие в виде уникальности этого поля - то просто песня.
PM MAIL WWW ICQ   Вверх
LSD
Дата 2.2.2005, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
igon
Дата 3.2.2005, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 7
Всего: 21



Цитата
sys_guid() можно поставить в качестве умолчального значения для столбца и не надо триггеров

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

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


      7CD5B7769DF75CEFE034080020825436
      7CD5B7769DF85CEFE034080020825436
      7CD5B7769DF95CEFE034080020825436
      7CD5B7769DFA5CEFE034080020825436

Значения уникальны, но что каждое следующее будет БОЛЬШЕ (Increment) предыдущего, - не гарантируется.
sequence это гарантирует: значения в поле будут возрастать, правда, не обязательно монотонно - могут возникать пропуски номеров, если значение, возвращенное MySequence.next(), не было использовано (например, ROLLBACK после Insert)

Это сообщение отредактировал(а) igon - 3.2.2005, 08:28


--------------------
Хотите поговорить об этом?
PM   Вверх
LSD
Дата 3.2.2005, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(igon @ 3.2.2005, 08:27)
Значения уникальны, но что каждое следующее будет БОЛЬШЕ (Increment) предыдущего, - не гарантируется.

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

P.S. Когда мне нужен сложный пароль я использую sys_guid() smile


--------------------
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.
PM MAIL WWW   Вверх
Valdemaras
Дата 30.1.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Я что то сильно туплю по этому поводу, ибо с ораклом работаю второй день.
Хочу что бы мне по шагам расписали что надо сделать.
Я создал последовательность таким образом:

Код
CREATE SEQUENCE TabNoSeq INCREMENT BY 1


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

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

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

таблица из двух столбцов типов number
PM MAIL   Вверх
LSD
Дата 30.1.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
Valdemaras
Дата 30.1.2006, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



И как он должен выглядеть? просто я до конца не понимаю сути псевдо столбцов и так далее.

по поводу CODE, спасибо учту!

Это сообщение отредактировал(а) Valdemaras - 30.1.2006, 15:31
PM MAIL   Вверх
LSD
Дата 30.1.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Что то типа такого:
Код
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;



--------------------
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.
PM MAIL WWW   Вверх
Valdemaras
Дата 31.1.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Спасибо все работает как хотел. Для полного понимания меня интересует название параметра
Код

:NEW.ID 

Его первая часть конечно. Скажите что это, а потом сам почитаю что это.
PM MAIL   Вверх
LSD
Дата 31.1.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.