Гость
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос по системным таблицам / 11 сообщений из 11, страница 1 из 1
05.05.2011, 10:50
    #37246785
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
Добрый день, коллеги!

Мне нужно было промониторить внесение изменений в таблицу, и я сделал это с помощью вот такого триггера:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create trigger audit_upd_paym_subj update on paym_subj
for each row
(insert into audit (tabname, username, hostname, sqs_statement)
select "paym_subj", username, hostname, sqs_statement
from sysmaster:syssessions,
sysmaster:syssqlstat
where sid= DBINFO('sessionid')
and sid = sqs_sessionid);

К сожалению, поле sqs_sessionid триггер сохраняет так:

Код: plaintext
1.
UPDATE paym_subj SET recv_code = ?, psubj_descr = ?, recv_name = ?, recv_inn = ?, recv_acc = ?, rv_bank = ?, rv_bik = ?, rv_coracc = ?, ps_par_code0 = ?, ps_par_nm0 = ?, ps_par_val0 = ?, ps_reg_0 = ?,

Подскажите, плз, как сохранить значения, которые присваиваются?
...
Рейтинг: 0 / 0
05.05.2011, 14:59
    #37247506
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
klepaДобрый день, коллеги!

Мне нужно было промониторить внесение изменений в таблицу, и я сделал это с помощью вот такого триггера:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create trigger audit_upd_paym_subj update on paym_subj
for each row
(insert into audit (tabname, username, hostname, sqs_statement)
select "paym_subj", username, hostname, sqs_statement
from sysmaster:syssessions,
sysmaster:syssqlstat
where sid= DBINFO('sessionid')
and sid = sqs_sessionid);

К сожалению, поле sqs_sessionid триггер сохраняет так:

Код: plaintext
1.
UPDATE paym_subj SET recv_code = ?, psubj_descr = ?, recv_name = ?, recv_inn = ?, recv_acc = ?, rv_bank = ?, rv_bik = ?, rv_coracc = ?, ps_par_code0 = ?, ps_par_nm0 = ?, ps_par_val0 = ?, ps_reg_0 = ?,

Подскажите, плз, как сохранить значения, которые присваиваются?

это какое-то особо тонкое извращение.
Вы определили триггер на UPDATE и при этом сомневаетесь, что выполняется именно UPDATE ?

При создании триггера Вы можете адресоваться как к старым версиям значений, так и к новым для всех столбцов
...
Рейтинг: 0 / 0
05.05.2011, 16:47
    #37247904
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
Триггер срабатывает и сохраняет SQL запрос.
Но вместо значений полей - вопросы.
Вместо вопросов я хочу увидеть значения.
...
Рейтинг: 0 / 0
05.05.2011, 17:01
    #37247957
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
klepa,

Добавляете строчку в триггер
referencing old as o new as n

и получаете доступ как к старому значению, так и к новому.
SQL-команду формируете сами.
...
Рейтинг: 0 / 0
06.05.2011, 10:21
    #37249013
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
Проблема в другом.
Если запрос идет через dbaccess, то триггер сохраняет его так:

Код: plaintext
update paym_subj set recv_code =  735 ,recv_name = 'ООО ', recv_inn = '1234567', recv_acc = '4742048', psubj_descr = 'hhhh', r

Если через API, то так:

Код: plaintext
1.
UPDATE paym_subj SET recv_code = ?, psubj_descr = ?, recv_name = ?, recv_inn = ?, recv_acc = ?, rv_bank = ?, rv_bik = ?, rv_coracc = ?, ps_par_code0 = ?, ps_par_nm0 = ?, ps_par_val0 = ?, ps_reg_0 = ?,

Хочу, чтобы всегда было как в первом случае.
...
Рейтинг: 0 / 0
06.05.2011, 10:56
    #37249105
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
recv_code = ?

просто значение передается, через бинд переменные, программа так написана, это не изменить, и не нужно менять. Бинд переменные это во многих случаях огромное благо, ускорение выполнения повторяющихся sql запросов.



Этот запрос sysmaster:syssessions в триггере использовать нельзя, он может завалить информикс, он может показывать полную чушь и в дополнение затормозит вам всю систему напрочь.
Можно сделать проще, все зависит от вашей цели, которую мы не знаем.
...
Рейтинг: 0 / 0
06.05.2011, 11:21
    #37249196
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
Цель проста: Узнать кто, когда и как модифицирует таблицу.
...
Рейтинг: 0 / 0
06.05.2011, 11:23
    #37249199
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
Журавлев Денисrecv_code = ?

просто значение передается, через бинд переменные, программа так написана, это не изменить, и не нужно менять. Бинд переменные это во многих случаях огромное благо, ускорение выполнения повторяющихся sql запросов.


Но ведь эти переменные можно увидеть с помощью onstat -g sql?
...
Рейтинг: 0 / 0
06.05.2011, 11:36
    #37249248
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
klepaЦель проста: Узнать кто, когда и как модифицирует таблицу.Это не цель, это задача. Цель: быть сытым, задача: убить зайца.

Именно под вашу задачу в информиксе есть аудит.

Или просто как уже предлагалось в триггере пишете:

referencing old as o new as n

insert into audit values user, current, nvl(old.field0,'')||nvl(new.field0,'')||nvl(old.field1,'')||nvl(new.field1,'')||....
...
Рейтинг: 0 / 0
06.05.2011, 12:12
    #37249371
zaiets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
Журавлев Денис Цель: быть сытым, задача: убить зайца.

Именно под вашу задачу в информиксе есть аудит.


Не нужно убивать зайцев.
...
Рейтинг: 0 / 0
06.05.2011, 14:38
    #37249718
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по системным таблицам
zaietsЖуравлев Денис Цель: быть сытым, задача: убить зайца.

Не нужно убивать зайцев.
Целиком поддерживаю, зайцев, конечно :)
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос по системным таблицам / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]