![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"alter trigger" внутри тела процедуры [IB6.x]
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)
Изменение метаданных в процедурах недопустимо.