Генерировать SQL-скрипты для триггеров

#sql #triggers #db2 #generator

#sql #триггеры #db2 #генератор

Вопрос:

Мне часто приходится создавать триггер, который копирует все содержимое строк при вставке / обновлении в другую таблицу. Поскольку некоторые таблицы содержат 200 столбцов, часто требуется долгое написание

 CREATE TRIGGER scheme.trigger AFTER UPDATE ON scheme.table
  REFERENCING OLD as o_row NEW as n_row
  FOR EACH ROW
BEGIN
  INSERT INTO archive (...) VALUES(...);
END;
  

Это большой набор текста. Существует ли простой генератор для создания триггеров такого типа, вставок, обновлений?

Комментарии:

1. Я годами не работал с DB2, но разве нет таблицы словаря данных, на которую вы могли бы ссылаться, чтобы получить имена столбцов? Написать сохраненную процедуру для вывода вышеуказанного, вставляя в этот вывод список столбцов? Я делал это в Oracle и SQL Server, поэтому я предполагаю, что именно так вы сделали бы это в DB2.

2. Я планирую создать для этого вспомогательный инструмент, но в настоящее время у меня немного не хватает времени, и мне было интересно, нет ли бесплатного инструмента для этого.

3. начните с «выбрать * из системных таблиц» и переходите оттуда. Я подозреваю, что гораздо проще создать свой собственный, чем искать точный инструмент. это не такая уж сложная задача.

Ответ №1:

Если процесс имеет набор входных параметров и процесс с этими параметрами тот же, вы можете вызвать хранимую процедуру из триггера, передав параметры. Таким образом, вам не нужно переписывать / воссоздавать все эти предложения DML.

Комментарии:

1. Звучит неплохо, но количество параметров отличается от таблицы к таблице. Поддерживаются ли хранимые процедуры iSeries DB2 переменной длины параметров (возможно, вы знаете)?

2. Принято, поскольку нет инструмента, и это самый гибкий способ справиться с этим вручную.

Ответ №2:

Я не знаю инструмента, который генерирует инструкции CREATE TRIGGER для вас, но я много раз генерировал этот DDL из запроса, и единственное представление, которое мне когда-либо требовалось для ссылок, было SYSCAT.COLUMNS

Следующие факторы упростят запрос генератора триггеров DDL, который вы будете писать: — Имена столбцов между исходной таблицей и архивной таблицей идентичны. — Ни один из столбцов в целевой таблице не определен как СГЕНЕРИРОВАННЫЙ ВСЕГДА, в противном случае вам нужно будет исключить их из вашего оператора INSERT.