powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос по системным таблицам
11 сообщений из 11, страница 1 из 1
Вопрос по системным таблицам
    #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
Вопрос по системным таблицам
    #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
Вопрос по системным таблицам
    #37247904
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Триггер срабатывает и сохраняет SQL запрос.
Но вместо значений полей - вопросы.
Вместо вопросов я хочу увидеть значения.
...
Рейтинг: 0 / 0
Вопрос по системным таблицам
    #37247957
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klepa,

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

и получаете доступ как к старому значению, так и к новому.
SQL-команду формируете сами.
...
Рейтинг: 0 / 0
Вопрос по системным таблицам
    #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
Вопрос по системным таблицам
    #37249105
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
recv_code = ?

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



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

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


Но ведь эти переменные можно увидеть с помощью onstat -g sql?
...
Рейтинг: 0 / 0
Вопрос по системным таблицам
    #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
Вопрос по системным таблицам
    #37249371
zaiets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис Цель: быть сытым, задача: убить зайца.

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


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

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


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