Форум: "Базы";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
Вниз"alter trigger" внутри тела процедуры Найти похожие ветки
← →
samalex (2008-06-27 14:42) [0]Уважаемые знатоки!!!
Пытаюсь вставить в тело процедуры строку
"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.
Просто так строка работает.
Что может быть? Подскажите, пжт.
← →
Ega23 © (2008-06-27 14:49) [1]
declare @sql varchar(1000)
set @sql="ALTER TRIGGER TR_INS_CLIENT INACTIVE;";
exec(@sql);
← →
Johnmen © (2008-06-27 15:11) [2]
> Ega23 © (27.06.08 14:49) [1]
Причем тут MSSQL?
>samalex (27.06.08 14:42)
Изменение метаданных в процедурах недопустимо.
← →
Johnmen © (2008-06-27 15:12) [3]
> Изменение метаданных в процедурах недопустимо.
И, более того, такое желание говорит о кривом проектировании.
← →
Ega23 © (2008-06-27 15:13) [4]
> Причем тут MSSQL?
>
Упс. Мне показалось что MSSQL фигурировал. Ну да ладно, сама идея тогда...
← →
Правильный-Вася (2008-06-27 15:30) [5]идея дурная соврешенно
особенно в многопользовательском окружении
← →
samalex (2008-06-27 15:37) [6]Как мне тогда реализовать INSERT , чтобы не работал триггер, прикрепленный к таблице не вставку?
Это мне нужно : из-за сбоев или ошибок ОС программа не выполняет операцию INSERT. А генератор увеличивается. Остаются "дырки" в списке.
← →
Ega23 © (2008-06-27 15:43) [7]
> идея дурная соврешенно
> особенно в многопользовательском окружении
>
Идея отключать триггер дурна ещё более. Но если очень хочется...
а вообще я +1 к [3]
← →
Johnmen © (2008-06-27 15:49) [8]
> А генератор увеличивается. Остаются "дырки" в списке.
Беспокойство про "дырки в списке" - это паранойя. Поверь мне...
:)
← →
Johnmen © (2008-06-27 15:49) [9]Кстати, сходи на www.ibase.ru, почитай про генераторы.
← →
Anatoly Podgoretsky © (2008-06-27 15:56) [10]Для параноиков, не надо использовать генераторы.
← →
samalex (2008-06-27 15:56) [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 ; ^
← →
Поросенок Винни-Пух © (2008-06-27 15:59) [12]жертва извращенного чувства прекрасного
← →
Поросенок Винни-Пух © (2008-06-27 16:01) [13]не нравятся "дырки" - не используй генераторы и поимей уже настоящие проблемы, отличные от проблемы дырок.
← →
Johnmen © (2008-06-27 16:04) [14]
> samalex (27.06.08 15:56) [11]
Ты не фантазируй на тему стандартных приемов. Все они в примерах приведены на www.ibase.ru
← →
Petr V. Abramov © (2008-06-28 20:02) [15]
> Johnmen © (27.06.08 15:49) [8]
> Беспокойство про "дырки в списке" - это паранойя. Поверь
> мне...
не верю.
например, есть у тебя папка (физическая :) с документами за №№ от 1200 до 1700. И бумажки № 1234 нету. это о чем говорит, о том что ее потеряли или о том что ее никогда не было?
← →
sniknik © (2008-06-28 21:20) [16]> не верю.
зря
> о том что ее потеряли или о том что ее никогда не было?
ни о том ни о другом,
это говорит (в базовых терминах, документ/файл = запись) -
документ начали сохранять, но не довели дело до конца (откатили транзакцию) счетчик же автоинкремента(/переменная генератора) увеличился т.к. он вне транзакций.
или
данный документ удалили. удалили физически, с последующей упаковкой (т.е. сдурили, раз уж инфа об этих действиях нужна), а не как обычно(/правильно) признак "удалено" поставили.
но никак не "потеряли", как вообще можно потерять запись (раз чегото нет, значит этого нет.)? вот если бы при сбое запись осталась, а данные внутри отсутствовали бы, вот тогда это "потеряли". или есть ссылка на запись в другом месте а записи нет, вот это тоже "потеряли".
а уж того, что "ее никогда не было" такого вообще не может быть, что это вообще значит? раз ее даже не пытались сохранить, то ее не "никогда не было", а "и не создавали даже".
вообще, твое понимание это очередная вариация на тему о том, что порядковые номера записей чтото значат... только вместо порядка записей подменен нумерацией документов.
← →
Игорь Шевченко © (2008-06-28 22:27) [17]
> например, есть у тебя папка (физическая :) с документами
> за №№ от 1200 до 1700. И бумажки № 1234 нету. это о чем
> говорит, о том что ее потеряли или о том что ее никогда
> не было?
как бы номера бумажек базой данных автоматически не генерятся, нет ?
← →
Petr V. Abramov © (2008-06-29 12:55) [18]
> Игорь Шевченко © (28.06.08 22:27) [17]
нет.
или их печатают, а потом ручкой номер ставят? :) однако долго и расходы на стержни огого.
> sniknik © (28.06.08 21:20) [16]
> счетчик же автоинкремента(/переменная генератора) увеличился
> т.к. он вне транзакций.
кого колышет счетчик автоинкремента? кто это слово знает за пределами дельфимастер? :)
в папке нет документа. если нумерация без дырок, значит, его потеряли (съели, кто-то временно взял, нужное подчеркнуть). А если не сквозная - "ну может и не было его".
а на документе могут быть, например, важные пометки ручкой. Например, в накладной "болванки стальные 10 шт." написано "недостача одной, две погнуто, экспедитор подпись, приемщик подпись"
← →
Petr V. Abramov © (2008-06-29 12:59) [19]
> данный документ удалили. удалили физически, с последующей
> упаковкой (т.е. сдурили, раз уж инфа об этих действиях нужна),
> а не как обычно(/правильно) признак "удалено" поставили.
>
первый признак автоматизированного бардака
← →
PEAKTOP © (2008-06-29 16:16) [20]> 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 16:21) [21]
> законодательство-то разно бывает.
так законодательство и рыбу в документы заворачивать не запрещает
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c