У меня много кода и функций, использующих возможность вставлять значения OLD и NEW ДО триггера INSERT UPDATE и DELETE, в Sybase ADS и Postgresql. Я делаю это для запуска репликации, которая может захватывать и запускать каждый оператор IUD по мере его поступления, но во многих таблицах нет первичных ключей, поэтому мне нужно захватить все значения OLD для UPDATES и DELETES, а также значения NEW для INSERTS и UPDATES. Либо так, либо я создаю временные таблицы для любой реплицируемой таблицы.
Мне нужно сделать его динамическим, чтобы столбцы можно было запрашивать или хранить как набор столбцов с разделителями в таблице, потому что группа пользователей будет изменять их в случайное время. Я ценю любую помощь, предлагаемую советом.
Кажется, что следующий код дает инклюзивные ошибки операнда, но я не знаю, насколько я дальше, чем я думаю.
--1. using "temp tables" per replicating source
IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = 'table' AND type = 'U')
THEN
(select * into #table_repllog from __new;
Alter table #table_repllog add column Repl_TriggerCmd char(10);
Alter table #table_repllog add column Repl_Status Char(50);
Alter table #table_repllog add column Repl_TimeDate timestamp;
update #table_repllog set Repl_TriggerType='I',Repl_Status='READY',Repl_CreateTimeDate=NOW() WHERE Repl_TriggerType IS NULL,Repl_Status IS NULL,Repl_CreateTimeDate IS NULL)
--OR
--2. INSERT multiple delimited values into NewValues column
INSERT INTO log (TableName, TriggerCmd, Status, TimeDate,NewValues) select 'tablename','INSERT','READY', NOW(),col1+','+col2+','+col3 from __new;
- - наиболее желательный результат, но № 1, вероятно, более здоровый и менее хитрый с точки зрения БД. По сути, если я найду способ хранить несколько значений NEW или OLD в столбце (# 2), который позволит записывать в него несколько таблиц, чтобы мне не пришлось иметь по 1 таблице на каждый реплицируемый источник, такой как # 1.
Я ценю любого, кто может дать указатель или совет по коду. Пример для INSERT для SYBASE, который я передам в оператор триггера UPDATE и DELETE. Я упомянул Postgresql, но я сделаю отдельный, но эквивалентный вопрос.
Спасибо.