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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тригер на вставку уникальных данных в таблицу, Сделать /изменить готовый тригер 
:(
    Опции темы
Demelo
  Дата 19.11.2011, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



CREATE OR REPLACE TRIGGER имя_триггера
BEFORE INSERT OR UPDATE OR DELETE ON
"имя_таблицы" FOR EACH ROW

BEGIN
IF (inserting OR updating) AND (:new.id is null) THEN select
<имя_счетчика>.nextval into :new.id from dual; END IF;
END;

Вот есть заготовка. Смысл в том что тригер сам должен выбирать из последовательности значение первичного ключа, но этот тригер работает не правильно, если допустим у меня последовательность остановилась на 5, а число 6 уже есть в таблице, при использовании этого тригера произойдёт ошибка из-за нарушения целосности
Помогите исправить, там вроде нада что-то сделать с условием
Ну или у меня есть идея, но я не знаю как её записать
ну типо того
while <имя последовательности>=any<колонка примари кей в таблице> then <к последовательности прибавляем 1>
else IF (inserting OR updating) AND (:new.id is null) THEN select <имя_счетчика>.nextval into :new.id from dual; END IF;


Если не сложно помогите разобраться
PM MAIL   Вверх
Zloxa
Дата 19.11.2011, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Я правильно понимаю что ключ может быть присвоен как из последовательности, так и из какого-то другого места? Это не правильно так быть не должно. Значение ключа в "другом месте" может пересечься с тем, которое раньше было сгенерировано последовательностью.

Если же у вас уже есть ранее созданный набор данных, и вы хотите продолжить его ведение выбирая значение ключа из последовательности, то просто установите начальное значение последовательности заведомо большим нежели текущее значение превичного ключа, используя предложение start with команды create seqence.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Demelo
Дата 19.11.2011, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



это лаба,  мне сказали переделать тригер чтобы без разници какие даные были в таблице, тригер сработал и внёс уникальное значение при ставке
PM MAIL   Вверх
Zloxa
Дата 19.11.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



тогда спросите препода. Только он знает правильный ответ на свои вопросы.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ToshaCh
Дата 29.11.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

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



Хм. Я бы для гарантированного уникального значения взял хеш времени+сиквенса+константы.

Добавлено через 1 минуту и 38 секунд
Или просто сиквенса+константы. 

Это сообщение отредактировал(а) ToshaCh - 29.11.2011, 10:00


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
Zloxa
Дата 29.11.2011, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(ToshaCh @  29.11.2011,  10:00 Найти цитируемый пост)
Или просто сиквенса+константы. 

= create sequence seq start with 100500 ?

Цитата(ToshaCh @  29.11.2011,  10:00 Найти цитируемый пост)
 хеш времени+сиквенса+константы.

+ Мак сетвой карты = sys_guid()  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ToshaCh
Дата 29.11.2011, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

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



Цитата(Zloxa @  29.11.2011,  10:22 Найти цитируемый пост)
create sequence seq start with 100500 ?

Не-не-не, Дэвид Блейн, я вот с этим барахлом как админ часто сталкиваюсь. Почемуто девелоперам всегда приходят в голову мысли типа: "Да эта таблица никогда не разрастется!", "Да этот сиквенс и сотни не наберет!", или мое любимое "Да там рандом такой, что никогда не совпадет!" smile. И ведь потом эти упыри идут домой, а я всю ночь вылавливаю трудноуловимый баг на продакшене, под маты клиента. 

Это сообщение отредактировал(а) ToshaCh - 29.11.2011, 11:43


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
LSD
Дата 29.11.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(ToshaCh @  29.11.2011,  12:42 Найти цитируемый пост)
"Да там рандом такой, что никогда не совпадет!"

И сколько раз на практике 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   Вверх
ToshaCh
Дата 29.11.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

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



Цитата(LSD @  29.11.2011,  11:45 Найти цитируемый пост)
И сколько раз на практике sys_guid() выдавал одинаковые значения?


Я про сиквенс старт виз.


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
LSD
Дата 29.11.2011, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(ToshaCh @  29.11.2011,  12:48 Найти цитируемый пост)
Я про сиквенс старт виз. 

А как связан сиквенс и 
Цитата(ToshaCh @  29.11.2011,  12:42 Найти цитируемый пост)
"Да там рандом такой, что никогда не совпадет!"

?


--------------------
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   Вверх
Zloxa
Дата 29.11.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(ToshaCh @  29.11.2011,  11:42 Найти цитируемый пост)
Не-не-не

Я действительно не понял в чем преимущество сиквенс+константа против сиквенса со стартом. Вижу сплошь недостатки, в том числе и по админской части.

Цитата(ToshaCh @  29.11.2011,  11:42 Найти цитируемый пост)
Почемуто девелоперам всегда приходят в голову мысли типа: "Да эта таблица никогда не разрастется!", "Да этот сиквенс и сотни не наберет!", или мое любимое "Да там рандом такой, что никогда не совпадет!"

Мне с такими разрабами не доводилось работать локоть к локтю, я о них только в интернетах читал, а там, как известно, все врут.  smile 
Быть может, тебе так кажется потому, что ты не слышишь неистового звона в набат, сопровождаемого воплями мол "существующая схема не масштабируема и имеет малый запас прочности, мы сидим на бочке с порохом, чтобы сделать хоть как то близко к тому, чтобы это было по уму, надо в срочном порядке выделить три человекогода и сделать оптовую закупку кофе и печенюшек"


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ToshaCh
Дата 29.11.2011, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

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



Цитата(Zloxa @  29.11.2011,  12:36 Найти цитируемый пост)
Я действительно не понял в чем преимущество сиквенс+константа против сиквенса со стартом.

Тем, что рано или поздно ты до этого "старт виз" доберешься другим сиквенсом и требование уникальности будет нарушено. 

Цитата(Zloxa @  29.11.2011,  12:36 Найти цитируемый пост)
Быть может, тебе так кажется потому, что ты не слышишь неистового звона в набат, сопровождаемого воплями мол 

Я обычно этот звон создаю.  smile 


Цитата(LSD @  29.11.2011,  12:16 Найти цитируемый пост)
А как связан сиквенс и 

Это был пример недальновидного поведения разработчиков. 


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
Zloxa
Дата 29.11.2011, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(ToshaCh @  29.11.2011,  17:31 Найти цитируемый пост)
Тем, что рано или поздно ты до этого "старт виз" доберешься другим сиквенсом и требование уникальности будет нарушено. 

Ну, во первых, наличие другого сиквенса осталось за такими скобками, что совершенно не попало в пределы видимости  smile Если бы небеспредельное(ограниченное) количество сиквенсов таки было бы озвучено, можно было бы вспомнить советы старины Кайта и поразмыслить над  start with вкупе с increment by.
Во вторых, как озвученные риски снимает сиквенс+константа? Ну никак ведь! 

Цитата(ToshaCh @  29.11.2011,  17:31 Найти цитируемый пост)
Я обычно этот звон создаю.

И как у тебя, позволь поинтересоваться, обстоят дела с тремя человекогодами и запасом кофе с печенюшками?  smile 
Неужели твое руководство не пользуется столь привлекательным наследием Скарлет О'Хары и таки предпочитает заблаговременно убирать ружье, которое еще не известно когда выстрелит?


Это сообщение отредактировал(а) Zloxa - 29.11.2011, 19:26


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ToshaCh
Дата 30.11.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

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



Я имелл ввиду сивенс+текстовая константа (т.е. поле становится символьным). Неудачно выразился похоже, а с числовой естественно разницы никакой. По поводу плюшек и кофе. Ты перевернул все с ног на голову. Конечно, когда система уже спроектирована менять в ней что-то крайне дорого. Но на раннем этапе ляпы на подобии описанных мною можно утранить если немножко подумать.

А increment by это очень годно - я не подумал. 


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

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

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

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

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

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


 




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


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

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