Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PL/SQL Цикл по полям.


Страницы:   1 2

Курдль ©   (2008-08-22 17:37:00) 

Коллеги!
Возможно ли в триггере организовать цикл по полям таблицы?
Это нужно для замысловатого журналирования написать триггера почти на все таблицы, чтобы вычислять изменившиеся поля и писать их в логи. На SQL.ru искал решения - но нашел только такие же вопросы без ответов...


Игорь Шевченко   (2008-08-25 16:45:00) [21]

Курдль   (25.08.08 15:12) [14]


> Я уж спорил на эту тему с Ю.Зотовым и Petr V. Abramov за
> пивом.


Будет желание и возможность - можешь и со мной за пивом поспорить.


> 2. Трудно поддерживать повторяемость в проектах под разные
> СУБД.


Собственно, разрабатывать относительно большой проект под разные СУБД особо большого смысла не имеет - получится "плохой под разные СУБД" проект, слово "плохой" можно смело заменить на "неоптимальный".

Мало того, что все СУБД отличаются в механизмах работы, каждый их механизм встроен в СУБД и оптимизирован, следовательно, работает всяко быстрее (и надежнее), чем попытки его имитации на клиенте любого рода, будь то толстый клиент или сервер приложений.

Я Кайта процитирую:

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

Ну и кроме всего прочего, стоимость СУБД обычно несопоставима со стоимостью большого корпоративного приложения...


Курдль   (2008-08-25 15:12:00) [22]


> Игорь Шевченко ©   (25.08.08 14:57) [13]
> Но главная ценность в серверной логике - это то, что можно
> не гонять данные туда-сюда, обсчитывая ту самую логику.

Я уж спорил на эту тему с Ю.Зотовым и Petr V. Abramov за пивом.
И мне казалось, что привел весомые аргументы.
Гонять данные - это, конечно, не кошерно. И я против выполнения логики на клиенте. Я - за трехзвенку с мощным сервером приложений.
Вот мои аргументы.
1. В проекте накладно содержать много разнородных разработчиков.
2. Трудно поддерживать повторяемость в проектах под разные СУБД.
3. В то время, когда программирование продвинулось от процедурного к объектному, а уж не за горами и победа паттернов, - СУБД только делают неуклюжие попытки перейти к объектному программированию.


Игорь Шевченко   (2008-08-25 14:57:00) [23]


> Это, на мой взгляд, единственная ценность из всей серверной
> логики.


В серверной логике немножко больше ценностей, например, view и пакеты :)
Но главная ценность в серверной логике - это то, что можно не гонять данные туда-сюда, обсчитывая ту самую логику.


Курдль   (2008-08-25 14:01:00) [24]


> Petr V. Abramov ©   (25.08.08 11:32) [9]
> это жесть.
> так же, как и триггеры

Чем тебе триггеры-то не угодили?
Это, на мой взгляд, единственная ценность из всей серверной логики.


Курдль   (2008-08-25 13:22:00) [25]


> Игорь Шевченко ©   (25.08.08 11:52) [10]
> И че ? Есть заказчики, которые желают знать, кто именно
> и что изменил. Их полное и неотъемлемое право


Кстати, я давно уже интересуюсь гранью, когда пора уж будет переходить на хранилища данных во всех ипостасях (в части, касающейся "историзации" данных).
Даже ветку хотел завести на тему "нормальная форма и версионность/историзация - как им ужиться?".


Игорь Шевченко   (2008-08-25 11:52:00) [26]

Petr V. Abramov ©   (25.08.08 11:32) [9]


> аудит
> > почти на все таблицы
> это жесть.


И че ? Есть заказчики, которые желают знать, кто именно и что изменил. Их полное и неотъемлемое право


Petr V. Abramov   (2008-08-25 11:32:00) [27]


> Игорь Шевченко ©   (25.08.08 09:52) [8]

аудит
> почти на все таблицы
это жесть.
так же, как и триггеры


Игорь Шевченко   (2008-08-25 09:52:00) [28]

Курдль   (25.08.08 09:34) [7]


> Ага! :) Жаль, нет смайлика типа из м/ф "Вовка в Тридевятом
> царстве": "А вы и есть за меня будете? - Ага!"
> Именно так и хотелось бы.


Я бы программно сгенерировал такой триггер (такие триггеры), а что - набор полей есть, логику ты знаешь, раз уж обычного AUDIT-а недостаточно


Курдль   (2008-08-25 09:34:00) [29]


> А как ты себе это представляешь ?
> IF :NEW||col_name <> :OLD||col_name THEN
>  log_record_change ?
> проще триггер сгенерировать программно или использовать
> Oracle Workspace Manager для ведения истории записей

Ага! :) Жаль, нет смайлика типа из м/ф "Вовка в Тридевятом царстве": "А вы и есть за меня будете? - Ага!"
Именно так и хотелось бы.
Дело в том, что я не разработчик. И не заказчик. А где-то в промежности. :(
Заказчики, как всегда, заказали немного криво, а подрядчики, как всегда, добавили кривизны. Требовать от последних при всех доработках еще и журналирование по полной схеме поддерживать - нереально (это не входило в ФТ). А включить в один change request "всеобъемлющий скрипт" - еще можно было бы договориться.


> Petr V. Abramov ©   (23.08.08 12:04) [6]
> на DATABASE OPTIONS DETAILS 18.09 пойдешь?

А меня туда никто не приглашал :(
Я как-то в последнее время в BI-тусовке прижился.


Petr V. Abramov   (2008-08-23 12:04:00) [30]

или 11g с Total Recall
http://www.oracle.com/database/total-recall.html

P.S.
> Курдль
на DATABASE OPTIONS DETAILS 18.09 пойдешь?


Petr V. Abramov   (2008-08-23 11:00:00) [31]


> Это нужно для замысловатого журналирования написать триггера
> почти на все таблицы, чтобы вычислять изменившиеся поля
> и писать их в логи.

тогда лучше в сторону logminer погляди
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_logmnr.htm#i79049


Игорь Шевченко   (2008-08-23 09:35:00) [32]

Труп Васи Доброго ©   (22.08.08 21:12) [3]

То, что я предложил - это несколько нонсенс :)


Труп Васи Доброго   (2008-08-22 21:12:00) [33]


> чтобы вычислять изменившиеся поля и писать их в логи.

А чем тебе сам триггер не угодил? Зачем "вычислять" изменивщиеся поля, если при каждом изменении записи вызывается триггер, вот и сравнивай в нём, как Игорь предложил
> IF :NEW||col_name <> :OLD||col_name THEN

А дальше делай что угодно.
Такое ощущение, что либо ты не понимаешь что такое триггер и как он работает, либо ты не корректно описал задачу. Поясни плиз.


Игорь Шевченко   (2008-08-22 18:53:00) [34]


> Это нужно для замысловатого журналирования написать триггера
> почти на все таблицы, чтобы вычислять изменившиеся поля
> и писать их в логи.


А как ты себе это представляешь ?

IF :NEW||col_name <> :OLD||col_name THEN
 log_record_change ?

проще триггер сгенерировать программно или использовать Oracle Workspace Manager для ведения истории записей


Правильный$Вася   (2008-08-22 18:36:00) [35]

FOR x IN( SELECT * FROM User_Tab_Cols WHERE table_name = ...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо