Вы не вошли.
Страницы 1
Всем привет!!! Кто работал с подобной хренью? Есть вопрос. Требуется триггер, на событие Before Insert, так что бы если заноситься новая запись С любым номером, все остальные записи подвигались. Блять... все утро бьюсь. Опенсурс хуле... 
Господа, вы охуели. Все. ©Cэмен
Вне форума
хз... не работал, но вот это может быть, или это не совсем то?
ххх: у тебя iperf есть?
yyy: iperf? перфоратор от Apple чтоле?
xxx: Во всем мире уже известны российские дороги и дураки. Сейчас к ним еще домены добавятся.
Вне форума
хз... не работал, но вот это может быть, или это не совсем то?
К сожалению, нет. Я это уже видел.
Там можно 2 способами сделать, либо написать ручками Create Trigger... или в IBExpert, то же самое но уже без Ctreate Trigger... короче там завязка на PSQL он там свой для Firebird и Interbase. Кстати документация на русском для IBEXPERT да и вобще на Interbase отсуствует как класс, ну впрочем как и во всем опенсурсе, видимо это не нужно(С). Есть правда одна единственная переведенная книжка, называется руководство разработчика, но до того убогая, что, я думаю, что если бы документация например на MSSQL была бы подобного рода, то его бы врядли кто использовал. 
Отредактировано pavel2403 (23-10-10 14:46:28)
Господа, вы охуели. Все. ©Cэмен
Вне форума
CREATE [OR ALTER] TRIGGER name FOR tablename
[ACTIVE | INACTIVE]
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
[OR {INSERT | UPDATE | DELETE}
[OR {INSERT | UPDATE | DELETE}]]
[POSITION number]
AS <trigger_body>
www.destructor.de/firebird/trigger.htm
зачем нужен IBExpert?
Добавлено спустя 02 мин 07 с:
так что бы если заноситься новая запись С любым номером, все остальные записи подвигались.
куда подвигались?
Слорознание - первая ступень к успешному эникею!
Вне форума
зачем нужен IBExpert?
А зачем нужна утилита Pl\SQL для Oracle? А зачем MySQLAdmin и пр утилиты для работы с БД ведь есть же консоль! Ты это это хотел сказать? Правильно, незачем, садись 2.
CREATE [OR ALTER] TRIGGER name FOR tablename
[ACTIVE | INACTIVE]
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
[OR {INSERT | UPDATE | DELETE}
[OR {INSERT | UPDATE | DELETE}]]
[POSITION number]
AS <trigger_body>
Хех... Это я тебе и сам уже смогу рассказать на одном дыхании, даже ночью разбуди...
А вобще товарищь Балмер, я смотрю вы влезете в любую дырку, даже только услышав звон и нагуглив первое попавшее вхождение, вы уже спешите отметиться здесь. Это глупо. Иногда лучше жевать, и посмотреть, что скажут умные дяди. 
Господа, вы охуели. Все. ©Cэмен
Вне форума
А вобще товарищь Балмер, я смотрю вы влезете в любую дырку, даже только услышав звон и нагуглив первое попавшее вхождение, вы уже спешите отметиться здесь. wink
Я просто не могу понять, как можно бится над пустякойвой задачкой целый день
триггер сделать проще простого.
Иногда лучше жевать, и посмотреть, что скажут умные дяди. wink
Это ты себя назвал умным дядей?
после этого?
А зачем нужна утилита Pl\SQL для Oracle? А зачем MySQLAdmin и пр утилиты для работы с БД ведь есть же консоль!
Pl/SQL=MySQLAdmin
Паша, ну ты гонишь
и ответь ка:
Добавлено спустя 04 мин 42 с:
pavel2403 пишет:
так что бы если заноситься новая запись С любым номером, все остальные записи подвигались.
куда подвигались?
Отредактировано bALMER (23-10-10 22:17:48)
Слорознание - первая ступень к успешному эникею!
Вне форума
Пашик, все твои беды оттого, что у тебя верхняя пуговичка не застёгнута ты пытаешься опенсурс задействовать. Поставь уставной MS SQL и всё у тебя получится.
Yesterday it worked.
Today it is not working.
Windows is like that.
Вне форума
Пашик, все твои беды оттого, что у тебя верхняя пуговичка не застёгнута ты пытаешься опенсурс задействовать. Поставь уставной MS SQL и всё у тебя получится.
Ты нипаверишь, но если бы это была моя БД, то я бы так и сделал. Но, это не моя, а заказчика, ему её наваяли, ну вот теперь расхлебываю опенсурс... [другая женщина весьма нетяжелого поведения, но с буквой Т]... вот непруха-то!!!
Добавлено спустя 14 мин 07 с:
Я просто не могу понять, как можно бится над пустякойвой задачкой целый день триггер сделать проще простого.
Это все бла-бла. Докажи что ты не очередной линукс-Иксперт. Короче, есть таблица Personal в ней поля P_No( Integer), Name(Char(64)) ну и т д
Задача. Необходимо сделать триггер, что бы при выполенении Insert Into Personal (P_No, Name) Values (Любое число,'любое значение') если есть сотрудник с таким номером, то его номер менялся бы на последний в таблице, а его место заняла новая запись. Давай, вперде.
Это ведь легко, ты сам сказал.
Да, все что до AS можешь пропустить.
Отредактировано pavel2403 (23-10-10 23:02:08)
Господа, вы охуели. Все. ©Cэмен
Вне форума
DECLARE
t INT;
t1 TEXT;
BEGIN
SELECT INTO t MAX(P_No) FROM Personal;
SELECT INTO t1 Name FROM Personal WHERE P_No=NEW.P_No;
IF t1 IS NULL THEN
RETURN NEW;
ELSE
NEW.P_No=t+1;
RETURN NEW;
END IF;
END;как-то так
это как пример, не оптимизированный, но все же лучше чем ничего 
Отредактировано bALMER (23-10-10 23:15:25)
Слорознание - первая ступень к успешному эникею!
Вне форума
как-то так это как пример, не оптимизированный, но все же лучше чем ничего
ОК, спасибо, завтра проверю отпишусь, сегодня уже чой-то заебался совсем. 
Добавлено спустя 02 мин 25 с:
SELECT INTO t MAX(P_No) FROM Personal;
Как-то коряво, дело в том, что если номера не идут попорядку и их значения не соотвествуют номерам строк, то в таблице будут пропуски может лучше Select Count(P_No) As t From Personal??? 
Отредактировано pavel2403 (23-10-10 23:34:47)
Господа, вы охуели. Все. ©Cэмен
Вне форума
Select Count(P_No) As t From Personal
не, надо максимальное, ибо count возвращает количество, а не максимальное значение. Т.е. совпадать могут. А с max не совпадут.
Слорознание - первая ступень к успешному эникею!
Вне форума
не, надо максимальное, ибо count возвращает количество, а не максимальное значение. Т.е. совпадать могут. А с max не совпадут.
Точно, уже туплю. 
Господа, вы охуели. Все. ©Cэмен
Вне форума
Это все бла-бла. Докажи что ты не очередной линукс-Иксперт. Короче, есть таблица Personal в ней поля P_No( Integer), Name(Char(64)) ну и т д
Задача. Необходимо сделать триггер, что бы при выполенении Insert Into Personal (P_No, Name) Values (Любое число,'любое значение') если есть сотрудник с таким номером, то его номер менялся бы на последний в таблице, а его место заняла новая запись. Давай, вперде.
Это ведь легко, ты сам сказал. wink Да, все что до AS можешь пропустить.
Не понимаю над чем тут вообще ломать голову? Не могу понять...
Дизайн таблицы какой-то ебанутый. Что за апликация, полагающаяся на столь уебищную логику?
An internal error occurred while showing an internal error.
Вне форума
DECLARE
t INT;
t1 TEXT;
BEGIN
SELECT INTO t MAX(P_No) FROM Personal;
SELECT INTO t1 Name FROM Personal WHERE P_No=NEW.P_No;IF t1 IS NULL THEN
RETURN NEW;
ELSE
NEW.P_No=t+1;
RETURN NEW;
END IF;
END;
Так ну поехали.
Значит задача стояла так
что бы при выполенении Insert Into Personal (P_No, Name) Values (Любое число,'любое значение') если есть сотрудник с таким номером, то его номер менялся бы на последний в таблице, а его место заняла новая запись.
То что ты написал- просто ахинея во второй части. Потому что никакого обновления таблицы со сдвигом записей не будет. На самом деле будет просто вставлена запись с последним номером, а те что были останутся на месте. текст триггера следующий
/* Trigger text */
declare variable t integer;
declare variable g integer;
BEGIN
Select Max(User_Numder) As t From Personal;
IF (New.P_No<= t) Then
for g = New.P_No to t+1
update Personal Set P_No = g Where P_No >New.P_No;
next g
END IF;
END
То есть из всего триггера ты угадал только одну строчку. 
Добавлено спустя 02 мин 43 с:
Не понимаю над чем тут вообще ломать голову? Не могу понять...
Дык не ломай... тебя что, кто-то застявляет? 
Добавлено спустя 58 мин 25 с:
Update: после утреннего пива:
/* Trigger text */
BEGIN
update Personal Set P_No= P_No +1 Where P_No >= New.P_No;
END

Отредактировано pavel2403 (24-10-10 13:19:31)
Господа, вы охуели. Все. ©Cэмен
Вне форума
Павел! Ты не можешь сформулировать задачу четко.
Вот первая формулировка:
Задача. Необходимо сделать триггер, что бы при выполенении Insert Into Personal (P_No, Name) Values (Любое число,'любое значение') если есть сотрудник с таким номером, то его номер менялся бы на последний в таблице, а его место заняла новая запись. Давай, вперде.
То есть, если такой номер уже есть, сменить его на САМЫЙ ПОСЛЕДНИЙ +1.
Вот вторая формулировка:
То что ты написал- просто ахинея во второй части. Потому что никакого обновления таблицы со сдвигом записей не будет. На самом деле будет просто вставлена запись с последним номером, а те что были останутся на месте.
Из которой молодые подаваны понимают, что надо сдвигать остаток таблицы вперед, чтобы освободить место для свежей записи...
окей, вот твоя идея алгоритма сдвига:
for g = New.P_No to t+1
update Personal Set P_No = g Where P_No >New.P_No;
next g
То есть, если у нас есть:
5, Вася
6, Петя
7, Паша
то после первой итерации мы получим:
6, Вася
6, Петя
6, Паша...
И после второй 7,7,7
Вот еще один вариант:
update Personal Set P_No= P_No +1 Where P_No >= New.P_No;
Тут я не уверен, работаю с MySql и там такое просто не пролезет
Опять же непонятна логика такой таблицы, насколько непрерывны эти номера итд
An internal error occurred while showing an internal error.
Вне форума
Кантрабас, вот это:
Задача. Необходимо сделать триггер, что бы при выполенении Insert Into Personal (P_No, Name) Values (Любое число,'любое значение') если есть сотрудник с таким номером, то его номер менялся бы на последний в таблице, а его место заняла новая запись. Давай, вперде.
лично мне позволило понять, что нужна вставка со сдвигом. задача поставлена вполне конкретно, если честно.
ххх: у тебя iperf есть?
yyy: iperf? перфоратор от Apple чтоле?
xxx: Во всем мире уже известны российские дороги и дураки. Сейчас к ним еще домены добавятся.
Вне форума
BEGIN
update Personal Set P_No= P_No +1 Where P_No >= New.P_No;
END
убить мало(
пример:
1 | Name1
2 | Name2
3 | Name3
NEW.P_No=2
update Personal Set P_No= 3 Where P_No >= New.P_No
Где профит??
и где возвращаемое значение? Паш, ты в своем репертуаре(
Отредактировано bALMER (24-10-10 23:25:05)
Слорознание - первая ступень к успешному эникею!
Вне форума
Страницы 1
[ Сгенерировано за 0.010 сек, 7 запросов выполнено - Использовано памяти: 1.74 Мбайт (Пик: 1.82 Мбайт) ]