Объявление

Односложные и бессмысленные темы, не несущие полезную нагрузку или не содержащие в себе вопрос, будут удаляться!

#1 23-10-10 14:32:51

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129

Firebird и IBExpert

Всем привет!!! Кто работал с подобной хренью? Есть вопрос. Требуется триггер, на событие Before Insert, так что бы если заноситься новая запись С любым номером, все остальные записи подвигались. Блять... все утро бьюсь. Опенсурс хуле... roll


Господа, вы охуели. Все. ©Cэмен

Вне форума

#2 23-10-10 14:35:47

kenzzzooo
джинн, етить-колотить....
Откуда: лампы
Здесь с 27-02-10
Сообщений: 1,664

Re: Firebird и IBExpert

хз... не работал, но вот это может быть, или это не совсем то?


ххх: у тебя iperf есть?
yyy: iperf? перфоратор от Apple чтоле?

xxx: Во всем мире уже известны российские дороги и дураки. Сейчас к ним еще домены добавятся.

Вне форума

#3 23-10-10 14:45:08

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129

Re: Firebird и IBExpert

kenzzzooo пишет:

хз... не работал, но вот это может быть, или это не совсем то?

К сожалению, нет. Я это уже видел.  sad  Там можно 2 способами сделать, либо написать ручками Create Trigger... или в IBExpert, то же самое но уже без Ctreate Trigger... короче там завязка на PSQL он  там свой для Firebird и Interbase. Кстати документация на русском для IBEXPERT да и вобще на Interbase отсуствует как класс, ну впрочем как и во всем опенсурсе, видимо это не нужно(С). Есть правда одна единственная переведенная книжка, называется руководство разработчика, но до того убогая, что, я думаю, что если бы документация например на  MSSQL была бы  подобного рода, то его бы врядли кто использовал.  sad

Отредактировано pavel2403 (23-10-10 14:46:28)


Господа, вы охуели. Все. ©Cэмен

Вне форума

#4 23-10-10 18:25:27

bALMER
не мешайте, я творю windows 8
Здесь с 11-10-10
Сообщений: 456

Re: Firebird и IBExpert

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 с:

pavel2403 пишет:

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

куда подвигались?


Слорознание - первая ступень к успешному эникею!

Вне форума

#5 23-10-10 22:04:03

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129

Re: Firebird и IBExpert

bALMER пишет:

зачем нужен IBExpert?

А зачем нужна утилита Pl\SQL для Oracle? А зачем MySQLAdmin и пр утилиты для работы с БД ведь есть же консоль! Ты это это хотел сказать? Правильно, незачем, садись 2. big_smile

bALMER пишет:

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>

Хех... Это я тебе и сам уже смогу рассказать на одном дыхании, даже ночью разбуди... big_smile
А вобще товарищь Балмер, я смотрю вы влезете в любую дырку, даже только услышав звон и нагуглив первое попавшее вхождение, вы уже спешите отметиться здесь. Это глупо. Иногда лучше жевать, и посмотреть, что скажут умные дяди. wink


Господа, вы охуели. Все. ©Cэмен

Вне форума

#6 23-10-10 22:10:27

bALMER
не мешайте, я творю windows 8
Здесь с 11-10-10
Сообщений: 456

Re: Firebird и IBExpert

pavel2403 пишет:

А вобще товарищь Балмер, я смотрю вы влезете в любую дырку, даже только услышав звон и нагуглив первое попавшее вхождение, вы уже спешите отметиться здесь.  wink

Я просто не могу понять, как можно бится над пустякойвой задачкой целый день big_smile  триггер сделать проще простого.

pavel2403 пишет:

Иногда лучше жевать, и посмотреть, что скажут умные дяди. wink

Это ты себя назвал умным дядей? lol после этого?

pavel2403 пишет:

А зачем нужна утилита Pl\SQL для Oracle? А зачем MySQLAdmin и пр утилиты для работы с БД ведь есть же консоль!

Pl/SQL=MySQLAdmin lol  Паша, ну ты гонишь big_smile

и ответь ка:

Добавлено спустя 04 мин 42 с:

bALMER пишет:

pavel2403 пишет:

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

куда подвигались?

Отредактировано bALMER (23-10-10 22:17:48)


Слорознание - первая ступень к успешному эникею!

Вне форума

#7 23-10-10 22:34:49

ikkunan salvataja
Участник
Здесь с 30-01-10
Сообщений: 2,803

Re: Firebird и IBExpert

Пашик, все твои беды оттого, что у тебя верхняя пуговичка не застёгнута ты пытаешься опенсурс задействовать. Поставь уставной MS SQL и всё у тебя получится.


Yesterday it worked.
Today it is not working.
Windows is like that.

Вне форума

#8 23-10-10 22:45:59

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129

Re: Firebird и IBExpert

ikkunan salvataja пишет:

Пашик, все твои беды оттого, что у тебя верхняя пуговичка не застёгнута ты пытаешься опенсурс задействовать. Поставь уставной MS SQL и всё у тебя получится.

Ты нипаверишь, но если бы это была моя БД, то я бы так и сделал. Но, это не моя, а заказчика, ему её наваяли, ну вот теперь расхлебываю опенсурс... [другая женщина весьма нетяжелого поведения, но с буквой Т]... вот непруха-то!!!

Добавлено спустя 14 мин 07 с:

bALMER пишет:

Я просто не могу понять, как можно бится над пустякойвой задачкой целый день   триггер сделать проще простого.

Это все бла-бла. Докажи что ты не очередной линукс-Иксперт. Короче, есть таблица Personal в ней поля P_No( Integer), Name(Char(64)) ну и т д
Задача. Необходимо сделать триггер, что бы при выполенении Insert Into Personal (P_No, Name) Values (Любое число,'любое значение') если есть сотрудник с таким номером, то его номер менялся бы на последний в таблице, а его место заняла новая запись. Давай, вперде.
Это ведь легко, ты сам сказал. wink  Да, все что до AS можешь пропустить.

Отредактировано pavel2403 (23-10-10 23:02:08)


Господа, вы охуели. Все. ©Cэмен

Вне форума

#9 23-10-10 23:14:55

bALMER
не мешайте, я творю windows 8
Здесь с 11-10-10
Сообщений: 456

Re: Firebird и IBExpert

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;

как-то так wink это как пример, не оптимизированный, но все же лучше чем ничего wink

Отредактировано bALMER (23-10-10 23:15:25)


Слорознание - первая ступень к успешному эникею!

Вне форума

#10 23-10-10 23:29:07

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129

Re: Firebird и IBExpert

bALMER пишет:

как-то так  это как пример, не оптимизированный, но все же лучше чем ничего

ОК, спасибо, завтра проверю отпишусь, сегодня уже чой-то заебался совсем. sad

Добавлено спустя 02 мин 25 с:

bALMER пишет:

SELECT INTO t MAX(P_No) FROM Personal;

Как-то коряво, дело в том, что если номера не идут попорядку и их значения не соотвествуют номерам строк, то в таблице будут пропуски может лучше Select Count(P_No) As t  From Personal??? roll

Отредактировано pavel2403 (23-10-10 23:34:47)


Господа, вы охуели. Все. ©Cэмен

Вне форума

#11 23-10-10 23:39:53

bALMER
не мешайте, я творю windows 8
Здесь с 11-10-10
Сообщений: 456

Re: Firebird и IBExpert

pavel2403 пишет:

Select Count(P_No) As t  From Personal

не, надо максимальное, ибо count возвращает количество, а не максимальное значение. Т.е. совпадать могут. А с max не совпадут.


Слорознание - первая ступень к успешному эникею!

Вне форума

#12 23-10-10 23:45:02

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129

Re: Firebird и IBExpert

bALMER пишет:

не, надо максимальное, ибо count возвращает количество, а не максимальное значение. Т.е. совпадать могут. А с max не совпадут.

Точно, уже туплю. sad


Господа, вы охуели. Все. ©Cэмен

Вне форума

#13 24-10-10 09:37:00

Кантрабас
Недоперепил...
Откуда: Vaughan
Здесь с 15-05-10
Сообщений: 175

Re: Firebird и IBExpert

pavel2403 пишет:

Это все бла-бла. Докажи что ты не очередной линукс-Иксперт. Короче, есть таблица 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.

Вне форума

#14 24-10-10 09:47:24

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129

Re: Firebird и IBExpert

bALMER пишет:

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;

Так ну поехали.
Значит задача стояла так

pavel2403 пишет:

что бы при выполенении 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
То есть из всего триггера ты угадал только одну строчку. big_smile

Добавлено спустя 02 мин 43 с:

Кантрабас пишет:

Не понимаю над чем тут вообще ломать голову? Не могу понять...

Дык не ломай... тебя что, кто-то застявляет? roll

Добавлено спустя 58 мин 25 с:
Update: после утреннего пива:
/* Trigger text */
BEGIN
update Personal Set P_No= P_No +1  Where P_No >= New.P_No;
END
lol  lol  lol

Отредактировано pavel2403 (24-10-10 13:19:31)


Господа, вы охуели. Все. ©Cэмен

Вне форума

#15 24-10-10 14:51:45

Кантрабас
Недоперепил...
Откуда: Vaughan
Здесь с 15-05-10
Сообщений: 175

Re: Firebird и IBExpert

Павел! Ты не можешь сформулировать задачу четко.
Вот первая формулировка:

Задача. Необходимо сделать триггер, что бы при выполенении 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.

Вне форума

#16 24-10-10 19:44:30

kenzzzooo
джинн, етить-колотить....
Откуда: лампы
Здесь с 27-02-10
Сообщений: 1,664

Re: Firebird и IBExpert

Кантрабас, вот это:

pavel2403 пишет:

Задача. Необходимо сделать триггер, что бы при выполенении Insert Into Personal (P_No, Name) Values (Любое число,'любое значение') если есть сотрудник с таким номером, то его номер менялся бы на последний в таблице, а его место заняла новая запись. Давай, вперде.

лично мне позволило понять, что нужна вставка со сдвигом. задача поставлена вполне конкретно, если честно.


ххх: у тебя iperf есть?
yyy: iperf? перфоратор от Apple чтоле?

xxx: Во всем мире уже известны российские дороги и дураки. Сейчас к ним еще домены добавятся.

Вне форума

#17 24-10-10 23:24:28

bALMER
не мешайте, я творю windows 8
Здесь с 11-10-10
Сообщений: 456

Re: Firebird и IBExpert

pavel2403 пишет:

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)


Слорознание - первая ступень к успешному эникею!

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.010 сек, 7 запросов выполнено - Использовано памяти: 1.74 Мбайт (Пик: 1.82 Мбайт) ]