Как вызвать сценарий при изменении данных таблицы в Sybase 12.5?

ОС - UNIX. Я хотел бы вызвать сценарий оболочки для внешней проверки при изменении данных в таблице. Возможно ли это, и если да, то как.

Большое спасибо.


Обновлено: в идеале я хотел бы вызвать свой внешний скрипт один раз для любой дискретной операции: т.е.

  • обновить... > вызвать скрипт один раз
  • вставить в... > вызвать скрипт один раз
  • bcp в > сценарий вызова один раз

person brabster    schedule 12.12.2008    source источник
comment
Что будет делать сценарий продажи? Это для всех изменений во всех таблицах?   -  person dkretz    schedule 13.12.2008


Ответы (1)


Я думаю, вы могли бы вызвать xp_cmdshell из триггера.


Изменить: как упоминалось в комментариях, триггер срабатывает только один раз для каждого оператора модификации данных. (См. книги онлайн.) Таким образом, если у вас есть оператор обновления, который влияет на 100 строк, триггер сработает только один раз, а не 100 раз. Это должно позаботиться о ваших первых двух пунктах (обновить, вставить).

Триггер не сработает на bcp. Но bcp должен происходить из командной строки, поэтому не уверен, почему бы вам просто не добавить свой сценарий оболочки после каждой команды bcp?

Дополнительную информацию о вызове xp_cmdshell из триггера можно найти здесь.

Некоторые дополнительные комментарии: вы на самом деле не описали свою среду или то, чего вы пытаетесь достичь. Если вы работаете в среде OLTP, вам нужно убедиться, что ваш сценарий оболочки будет работать нормально, если в таблице одновременно происходит несколько обновлений. Если 3 пользователя делают обновления одновременно, будет ли работать ваш скрипт, если трое из них работают одновременно? Если вы делаете это как часть какой-то OLAP или пакетной системы, я не уверен, почему бы вам не добавить сценарий оболочки в поток заданий.

person Michael Sharek    schedule 12.12.2008
comment
Не уверен, что вы захотите вызвать его 100 раз, если у вас есть SQL-запрос, который обновляет 100 строк. - person dkretz; 13.12.2008
comment
В sybase триггеры срабатывают один раз для оператора, а не для каждой строки. - person Michael Sharek; 13.12.2008