Конференция "Базы" » "alter trigger" внутри тела процедуры [IB6.x]
 
  • samalex (27.06.08 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 © (27.06.08 14:49) [1]
    declare @sql varchar(1000)
    set @sql='ALTER TRIGGER TR_INS_CLIENT INACTIVE;';
    exec(@sql);

  • Johnmen © (27.06.08 15:11) [2]

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

    Причем тут MSSQL?

    >samalex   (27.06.08 14:42)

    Изменение метаданных в процедурах недопустимо.
  • Johnmen © (27.06.08 15:12) [3]

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

    И, более того, такое желание говорит о кривом проектировании.
  • Ega23 © (27.06.08 15:13) [4]

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


    Упс. Мне показалось что MSSQL фигурировал. Ну да ладно, сама идея тогда...
  • Правильный-Вася (27.06.08 15:30) [5]
    идея дурная соврешенно
    особенно в многопользовательском окружении
  • samalex (27.06.08 15:37) [6]
    Как мне тогда реализовать INSERT , чтобы не работал триггер, прикрепленный к таблице не вставку?
    Это мне нужно : из-за сбоев или ошибок ОС программа не выполняет операцию INSERT. А генератор увеличивается. Остаются "дырки" в списке.
  • Ega23 © (27.06.08 15:43) [7]

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


    Идея отключать триггер дурна ещё более. Но если очень хочется...
    а вообще я +1 к [3]
  • Johnmen © (27.06.08 15:49) [8]

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

    Беспокойство про "дырки в списке" - это паранойя. Поверь мне...
    :)
  • Johnmen © (27.06.08 15:49) [9]
    Кстати, сходи на www.ibase.ru, почитай про генераторы.
  • Anatoly Podgoretsky © (27.06.08 15:56) [10]
    Для параноиков, не надо использовать генераторы.
  • samalex (27.06.08 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 ; ^
  • Поросенок Винни-Пух © (27.06.08 15:59) [12]
    жертва извращенного чувства прекрасного
  • Поросенок Винни-Пух © (27.06.08 16:01) [13]
    не нравятся "дырки" - не используй генераторы и поимей уже настоящие проблемы, отличные от проблемы дырок.
  • Johnmen © (27.06.08 16:04) [14]

    > samalex   (27.06.08 15:56) [11]

    Ты не фантазируй на тему стандартных приемов. Все они в примерах приведены на www.ibase.ru
  • Petr V. Abramov © (28.06.08 20:02) [15]

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

    не верю.
    например, есть у тебя папка (физическая :) с документами за №№ от 1200 до 1700. И бумажки № 1234 нету. это о чем говорит, о том что ее потеряли или о том что ее никогда не было?
  • sniknik © (28.06.08 21:20) [16]
    > не верю.
    зря

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

    вообще, твое понимание это очередная вариация на тему о том, что порядковые номера записей чтото значат... только вместо порядка записей подменен нумерацией документов.
  • Игорь Шевченко © (28.06.08 22:27) [17]

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


    как бы номера бумажек базой данных автоматически не генерятся, нет ?
  • Petr V. Abramov © (29.06.08 12:55) [18]

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

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

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

    кого колышет счетчик автоинкремента? кто это слово знает за пределами дельфимастер? :)
    в папке нет документа. если нумерация без дырок, значит, его потеряли (съели, кто-то временно взял, нужное подчеркнуть). А если не сквозная - "ну может и не было его".
    а на документе могут быть, например, важные пометки ручкой. Например, в накладной "болванки стальные 10 шт." написано "недостача одной, две погнуто, экспедитор подпись, приемщик подпись"
  • Petr V. Abramov © (29.06.08 12:59) [19]

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


    первый признак автоматизированного бардака
 
Конференция "Базы" » "alter trigger" внутри тела процедуры [IB6.x]
Есть новые Нет новых   [134434   +27][b:0][p:0.001]