Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.08;
Скачать: CL | DM;

Вниз

"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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
2-1230394998
Te
2008-12-27 19:23
2009.02.08
!!!


2-1229951317
девушка
2008-12-22 16:08
2009.02.08
Как организовать работу с БД через хранимые процедуры?


2-1230177654
Merry
2008-12-25 07:00
2009.02.08
Долгое открытие программы


15-1229069695
Slider007
2008-12-12 11:14
2009.02.08
С днем рождения ! 12 декабря 2008 пятница


6-1198081557
SpellCaster
2007-12-19 19:25
2009.02.08
Распарсить FTP листинг