Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"alter trigger" внутри тела процедуры [IB6.x]


Страницы:   1 2

samalex ©   (2008-06-27 14:42:00) 

Уважаемые знатоки!!!
Пытаюсь вставить в тело процедуры строку
"ALTER TRIGGER TR_INS_CLIENT INACTIVE;"
для отключения на время триггера.

SET TERM ^ ;

CREATE PROCEDURE SP_INS_CLIENTS_ON_ORDER (
  ...
)
returns (
  ...
)
as
begin
 ALTER TRIGGER TR_INS_CLIENT INACTIVE;

 INSERT INTO Data_Clients
 (
  ...
 )
 VALUES
 (
   ...
 );

 suspend;

end^

SET TERM ; ^

Выдается ошибка
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 29, char 3.
ALTER.

Просто так строка работает.
Что может быть? Подскажите, пжт.


Petr V. Abramov   (2008-06-29 16:21:00) [1]


> законодательство-то разно бывает.

так законодательство и рыбу в документы заворачивать не запрещает


PEAKTOP   (2008-06-29 16:16:00) [2]

> samalex   (27.06.08 14:42)
>
> Пытаюсь вставить в тело процедуры строку
> "ALTER TRIGGER TR_INS_CLIENT INACTIVE;"


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

> Petr V. Abramov ©   (29.06.08 12:59) [19]
>
> первый признак автоматизированного бардака


Не факт, не факт - законодательство-то разно бывает. Если в классическом бухучете (Украина) главное, чтобы не было двух документов с одинаковыми номерами, а там хоть с "дырками" в нумерации, хоть без дырок, то в бухучете у аптекарей в накладных на выдачу наркотических препаратов и прекурсоров за каждую "дырку" можно схлопотать от 3 до 5 с конфискацией.


Petr V. Abramov   (2008-06-29 12:59:00) [3]


> данный документ удалили. удалили физически, с последующей
> упаковкой (т.е. сдурили, раз уж инфа об этих действиях нужна),
>  а не как обычно(/правильно) признак "удалено" поставили.
>


первый признак автоматизированного бардака


Petr V. Abramov   (2008-06-29 12:55:00) [4]


> Игорь Шевченко ©   (28.06.08 22:27) [17]

нет.
или их печатают, а потом ручкой номер ставят? :) однако долго и расходы на стержни огого.

> sniknik ©   (28.06.08 21:20) [16]
> счетчик же автоинкремента(/переменная генератора) увеличился
> т.к. он вне транзакций.

кого колышет счетчик автоинкремента? кто это слово знает за пределами дельфимастер? :)
в папке нет документа. если нумерация без дырок, значит, его потеряли (съели, кто-то временно взял, нужное подчеркнуть). А если не сквозная - "ну может и не было его".
а на документе могут быть, например, важные пометки ручкой. Например, в накладной "болванки стальные 10 шт." написано "недостача одной, две погнуто, экспедитор подпись, приемщик подпись"


Игорь Шевченко   (2008-06-28 22:27:00) [5]


> например, есть у тебя папка (физическая :) с документами
> за №№ от 1200 до 1700. И бумажки № 1234 нету. это о чем
> говорит, о том что ее потеряли или о том что ее никогда
> не было?


как бы номера бумажек базой данных автоматически не генерятся, нет ?


sniknik   (2008-06-28 21:20:00) [6]

> не верю.
зря

> о том что ее потеряли или о том что ее никогда не было?
ни о том ни о другом,
это говорит (в базовых терминах, документ/файл = запись) -
документ начали сохранять, но не довели дело до конца (откатили транзакцию) счетчик же автоинкремента(/переменная генератора) увеличился т.к. он вне транзакций.
или
данный документ удалили. удалили физически, с последующей упаковкой (т.е. сдурили, раз уж инфа об этих действиях нужна), а не как обычно(/правильно) признак "удалено" поставили.
но никак не "потеряли", как вообще можно потерять запись (раз чегото нет, значит этого нет.)? вот если бы при сбое запись осталась, а данные внутри отсутствовали бы, вот тогда это "потеряли". или есть ссылка на запись в другом месте а записи нет, вот это тоже "потеряли".
а уж того, что "ее никогда не было" такого вообще не может быть, что это вообще значит? раз ее даже не пытались сохранить, то ее не "никогда не было", а "и не создавали даже".

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


Petr V. Abramov   (2008-06-28 20:02:00) [7]


> Johnmen ©   (27.06.08 15:49) [8]
> Беспокойство про "дырки в списке" - это паранойя. Поверь
> мне...

не верю.
например, есть у тебя папка (физическая :) с документами за №№ от 1200 до 1700. И бумажки № 1234 нету. это о чем говорит, о том что ее потеряли или о том что ее никогда не было?


Johnmen   (2008-06-27 16:04:00) [8]


> samalex   (27.06.08 15:56) [11]

Ты не фантазируй на тему стандартных приемов. Все они в примерах приведены на www.ibase.ru


Поросенок Винни-Пух   (2008-06-27 16:01:00) [9]

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


Поросенок Винни-Пух   (2008-06-27 15:59:00) [10]

жертва извращенного чувства прекрасного


samalex   (2008-06-27 15:56:00) [11]

Убедили, пойду другим путем, изменю триггер.
Будет работать в зависимости от заполнения поля "order_client".
Как Вам такая идея?

SET TERM ^ ;
CREATE TRIGGER TR_ID_CLIENT FOR DATA_CLIENTS
ACTIVE BEFORE INSERT POSITION 0
as
begin
 if (NEW.order_client<>'') then
 begin
   NEW.id_order = GEN_ID(gen_id_order, 1);
 end
end
^
SET TERM ; ^


Anatoly Podgoretsky   (2008-06-27 15:56:00) [12]

Для параноиков, не надо использовать генераторы.


Johnmen   (2008-06-27 15:49:00) [13]

Кстати, сходи на www.ibase.ru, почитай про генераторы.


Johnmen   (2008-06-27 15:49:00) [14]


>  А генератор увеличивается. Остаются "дырки" в списке.

Беспокойство про "дырки в списке" - это паранойя. Поверь мне...
:)


Ega23   (2008-06-27 15:43:00) [15]


> идея дурная соврешенно
> особенно в многопользовательском окружении
>


Идея отключать триггер дурна ещё более. Но если очень хочется...
а вообще я +1 к [3]


samalex   (2008-06-27 15:37:00) [16]

Как мне тогда реализовать INSERT , чтобы не работал триггер, прикрепленный к таблице не вставку?
Это мне нужно : из-за сбоев или ошибок ОС программа не выполняет операцию INSERT. А генератор увеличивается. Остаются "дырки" в списке.


Правильный-Вася   (2008-06-27 15:30:00) [17]

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


Ega23   (2008-06-27 15:13:00) [18]


> Причем тут MSSQL?
>


Упс. Мне показалось что MSSQL фигурировал. Ну да ладно, сама идея тогда...


Johnmen   (2008-06-27 15:12:00) [19]


> Изменение метаданных в процедурах недопустимо.

И, более того, такое желание говорит о кривом проектировании.


Johnmen   (2008-06-27 15:11:00) [20]


> Ega23 ©   (27.06.08 14:49) [1]

Причем тут MSSQL?

>samalex   (27.06.08 14:42)

Изменение метаданных в процедурах недопустимо.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо