Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.005 c
15-1228813261
Добежал
2008-12-09 12:01
2009.02.08
Работоспособность обычного ПО на "тонких" клиентах


2-1229955164
Lera
2008-12-22 17:12
2009.02.08
DbGrid


15-1228389664
ANB
2008-12-04 14:21
2009.02.08
Кризис добрался до меня


15-1228913461
atruhin
2008-12-10 15:51
2009.02.08
Качество кода VCL


6-1198485123
DelphiN!
2007-12-24 11:32
2009.02.08
Определить IP адрес клиента через прокси





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский