![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Demelo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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; Если не сложно помогите разобраться |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Я правильно понимаю что ключ может быть присвоен как из последовательности, так и из какого-то другого места? Это не правильно так быть не должно. Значение ключа в "другом месте" может пересечься с тем, которое раньше было сгенерировано последовательностью.
Если же у вас уже есть ранее созданный набор данных, и вы хотите продолжить его ведение выбирая значение ключа из последовательности, то просто установите начальное значение последовательности заведомо большим нежели текущее значение превичного ключа, используя предложение start with команды create seqence. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Demelo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.2.2011 Репутация: нет Всего: нет |
это лаба, мне сказали переделать тригер чтобы без разници какие даные были в таблице, тригер сработал и внёс уникальное значение при ставке
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
тогда спросите препода. Только он знает правильный ответ на свои вопросы.
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
= create sequence seq start with 100500 ? + Мак сетвой карты = sys_guid() ![]() -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Не-не-не, Дэвид Блейн, я вот с этим барахлом как админ часто сталкиваюсь. Почемуто девелоперам всегда приходят в голову мысли типа: "Да эта таблица никогда не разрастется!", "Да этот сиквенс и сотни не наберет!", или мое любимое "Да там рандом такой, что никогда не совпадет!" ![]() Это сообщение отредактировал(а) ToshaCh - 29.11.2011, 11:43 -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
И сколько раз на практике 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. |
|||
|
||||
ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Я про сиквенс старт виз. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
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. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Я действительно не понял в чем преимущество сиквенс+константа против сиквенса со стартом. Вижу сплошь недостатки, в том числе и по админской части. Мне с такими разрабами не доводилось работать локоть к локтю, я о них только в интернетах читал, а там, как известно, все врут. ![]() Быть может, тебе так кажется потому, что ты не слышишь неистового звона в набат, сопровождаемого воплями мол "существующая схема не масштабируема и имеет малый запас прочности, мы сидим на бочке с порохом, чтобы сделать хоть как то близко к тому, чтобы это было по уму, надо в срочном порядке выделить три человекогода и сделать оптовую закупку кофе и печенюшек" -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
ToshaCh |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Тем, что рано или поздно ты до этого "старт виз" доберешься другим сиквенсом и требование уникальности будет нарушено.
Я обычно этот звон создаю. ![]() Это был пример недальновидного поведения разработчиков. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
||||
|
|||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Ну, во первых, наличие другого сиквенса осталось за такими скобками, что совершенно не попало в пределы видимости ![]() Во вторых, как озвученные риски снимает сиквенс+константа? Ну никак ведь! И как у тебя, позволь поинтересоваться, обстоят дела с тремя человекогодами и запасом кофе с печенюшками? ![]() Неужели твое руководство не пользуется столь привлекательным наследием Скарлет О'Хары и таки предпочитает заблаговременно убирать ружье, которое еще не известно когда выстрелит? Это сообщение отредактировал(а) Zloxa - 29.11.2011, 19:26 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |