[ОТВЕТИТЬ]
20.11.2007 11:45
Екатерина
 
Подскажите, можно ли...
Есть некая процедура, которая изменяет данные в таблице (любой). Мне необходимо записать лог - в новую только что созданную таблицу имя таблицы, которую апдейтила, поле, новое, старое значение. Можно ли после выполнения апдейта взять имя таблицы, которую апдейтила??? И это имя добавить в insert в таблицу лог как values???
20.11.2007 12:08
OlegON
 
Что-то не понятен вопрос. Процедура получает извне переменную с именем таблицы? Ну и писать эту переменную...
21.11.2007 02:23
isi
 
Наверно нужен триггер? Только если большие объемы обновлений и вставок, то можно получить пролемы с производительностью
21.11.2007 14:39
Екатерина
 
триггер тогда нужен на каждую изменяемую таблицу...
А без триггера...? После апдейта, из него же взять как-то имя таблицы и передать как параметр в другой апдейт или инсерт?
21.11.2007 15:57
OlegON
 
Екатерина, вы не ответили на мой вопрос. Процедура апдейтит какую-то заданную табло, имя этой табло ей, видимо, передается параметром. Почему бы не поправить эту процедуру, чтобы она после апдейта писала лог? Либо на все таблицы вешать триггеры, либо аудит.
21.11.2007 17:29
Екатерина
 
Не передается ей параметром. Есть процедура апдейта, в которой прописан обыкновенный апдейт таблицы, указанной так update table set name = '33' where ... После выполнений этой процы выполняется следующая, которая вставляет строку в таблицу лога. Чтобы не прописывать ручками имя таблицы, можно ли после выполнения процы апдейта взять из неё имя таблицы, которая указана в операторе update и передать параметром в процу insert. Без навешивания триггеров на таблицу, по которой делается апдейт.
21.11.2007 18:35
OlegON
 
Хорошо, еще раз. Что мешает из двух процедур сделать одну?
21.11.2007 18:41
Pyatak
 
Можно еще уточнить:
1) Вы ли пишете программу или пытаетесь исправить что-то кем-то написанное ранее?
2) В какой среде на каком языке пишите?

а то складывается впечатление, что тут разговаривают слепой с немым...
23.11.2007 18:15
Екатерина
 
Да ничего не мешает. Легко. Но у меня несколько может быть будет процедур апдейта и хотелось бы одну для лога иметь универсальную.
Исправить ничего не пытаюсь, пишу для себя. И нужна такая мулька. Можно ли из оператора апдейт взять имя таблицы как переменную. Т.е. после update TABLE set .... вдруг написать А = TABLE. И херакнуть её в другой update или insert или select... Я даже не знаю как еще сказать, что мне надо.... *11
23.11.2007 18:38
OlegON
 
Ну и передавайте тогда в эту процедуру имя табло, как переменную...
29.11.2007 11:28
Екатерина
 
Простой вопрос: КАК!!!! Как взять и передать?
29.11.2007 17:15
Екатерина
 
Интересно...

update table_object set object_name = 'Новое' where object_id = 1

var = table_object ??? Как здесь не руками прописывать имя таблицы, а взять имя таблицы из оператора апдейт, апдейт может быть любой таблицы.

begin
procedure(var); ???
end;

И как же так??? Каким образом?
29.11.2007 17:39
OlegON
 
Цитата:
Екатерина И как же так??? Каким образом?
Что-то я не понял...
Код:
 
update table_object set object_name = 'Новое' where object_id = 1
procedure('table_object');
что мешает? лень лишний раз имя таблицы написать?
30.11.2007 03:21
paul
 
Читал ветку, много думал...

И все же, что хочет автор аудит изменений в базе или лог своих действий над таблицами?
07.12.2007 12:09
Екатерина
 
Да, лень писать несколько раз имя таблицы, имена полей, которые меняю...

Хочу такой аудитик: имя таблицы, имя поля изменяемое, ИД таблицы, старое значение, новое, юзер, примечание. Процедура одна. И хочу туда передавать имена таблиц, полей из оператора инсерт, апдейт. Можно? Или невозможно?
07.12.2007 13:48
isi
 
Сам не пользовался и не пробовал, но в TOAD в "Database"->"Administer"->"Audit SQL". На вскидку вроде то что нужно, посмотри.
А триггером точно не получится
Опции темы


Часовой пояс GMT +3, время: 02:39.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.