-
Коллеги! Возможно ли в триггере организовать цикл по полям таблицы? Это нужно для замысловатого журналирования написать триггера почти на все таблицы, чтобы вычислять изменившиеся поля и писать их в логи. На SQL.ru искал решения - но нашел только такие же вопросы без ответов...
-
FOR x IN( SELECT * FROM User_Tab_Cols WHERE table_name = ...
-
> Это нужно для замысловатого журналирования написать триггера > почти на все таблицы, чтобы вычислять изменившиеся поля > и писать их в логи.
А как ты себе это представляешь ?
IF :NEW||col_name <> :OLD||col_name THEN log_record_change ?
проще триггер сгенерировать программно или использовать Oracle Workspace Manager для ведения истории записей
-
> чтобы вычислять изменившиеся поля и писать их в логи.
А чем тебе сам триггер не угодил? Зачем "вычислять" изменивщиеся поля, если при каждом изменении записи вызывается триггер, вот и сравнивай в нём, как Игорь предложил > IF :NEW||col_name <> :OLD||col_name THEN
А дальше делай что угодно. Такое ощущение, что либо ты не понимаешь что такое триггер и как он работает, либо ты не корректно описал задачу. Поясни плиз.
-
Труп Васи Доброго © (22.08.08 21:12) [3]
То, что я предложил - это несколько нонсенс :)
-
-
-
> А как ты себе это представляешь ? > 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-тусовке прижился.
-
Курдль (25.08.08 09:34) [7]
> Ага! :) Жаль, нет смайлика типа из м/ф "Вовка в Тридевятом > царстве": "А вы и есть за меня будете? - Ага!" > Именно так и хотелось бы.
Я бы программно сгенерировал такой триггер (такие триггеры), а что - набор полей есть, логику ты знаешь, раз уж обычного AUDIT-а недостаточно
-
> Игорь Шевченко © (25.08.08 09:52) [8]
аудит > почти на все таблицы это жесть. так же, как и триггеры
-
Petr V. Abramov © (25.08.08 11:32) [9]
> аудит > > почти на все таблицы > это жесть.
И че ? Есть заказчики, которые желают знать, кто именно и что изменил. Их полное и неотъемлемое право
-
> Игорь Шевченко © (25.08.08 11:52) [10] > И че ? Есть заказчики, которые желают знать, кто именно > и что изменил. Их полное и неотъемлемое право
Кстати, я давно уже интересуюсь гранью, когда пора уж будет переходить на хранилища данных во всех ипостасях (в части, касающейся "историзации" данных). Даже ветку хотел завести на тему "нормальная форма и версионность/историзация - как им ужиться?".
-
> Petr V. Abramov © (25.08.08 11:32) [9] > это жесть. > так же, как и триггеры
Чем тебе триггеры-то не угодили? Это, на мой взгляд, единственная ценность из всей серверной логики.
-
> Это, на мой взгляд, единственная ценность из всей серверной > логики.
В серверной логике немножко больше ценностей, например, view и пакеты :) Но главная ценность в серверной логике - это то, что можно не гонять данные туда-сюда, обсчитывая ту самую логику.
-
> Игорь Шевченко © (25.08.08 14:57) [13] > Но главная ценность в серверной логике - это то, что можно > не гонять данные туда-сюда, обсчитывая ту самую логику.
Я уж спорил на эту тему с Ю.Зотовым и Petr V. Abramov за пивом. И мне казалось, что привел весомые аргументы. Гонять данные - это, конечно, не кошерно. И я против выполнения логики на клиенте. Я - за трехзвенку с мощным сервером приложений. Вот мои аргументы. 1. В проекте накладно содержать много разнородных разработчиков. 2. Трудно поддерживать повторяемость в проектах под разные СУБД. 3. В то время, когда программирование продвинулось от процедурного к объектному, а уж не за горами и победа паттернов, - СУБД только делают неуклюжие попытки перейти к объектному программированию.
-
Курдль (25.08.08 15:12) [14]
> Я уж спорил на эту тему с Ю.Зотовым и Petr V. Abramov за > пивом.
Будет желание и возможность - можешь и со мной за пивом поспорить.
> 2. Трудно поддерживать повторяемость в проектах под разные > СУБД.
Собственно, разрабатывать относительно большой проект под разные СУБД особо большого смысла не имеет - получится "плохой под разные СУБД" проект, слово "плохой" можно смело заменить на "неоптимальный".
Мало того, что все СУБД отличаются в механизмах работы, каждый их механизм встроен в СУБД и оптимизирован, следовательно, работает всяко быстрее (и надежнее), чем попытки его имитации на клиенте любого рода, будь то толстый клиент или сервер приложений.
Я Кайта процитирую:
"Лучшим способом, позволяющим достичь некоторого уровня мобильности приложения для множества баз данных, является кодирование всех компонентов базы данных, используемых приложением, в хранимых процедурах."
Ну и кроме всего прочего, стоимость СУБД обычно несопоставима со стоимостью большого корпоративного приложения...
-
> Игорь Шевченко © (25.08.08 16:45) [15] > Будет желание и возможность - можешь и со мной за пивом поспорить.
Да леГко! :) Только Савелия не предлагать. Я туда в разумное время не доеду. Мой ареал - между ЦАО и ВАО.
Кстати, я в своих аргументах против серверной логики о "мультибазовых" проектах не упоминал. Я говорил про технологическую вооруженность софтверной компании. Кайт - мужчинка уважаемый. Но он, кажись, и говорил, что "при проектировании БД самый худший враг - догматизм". Про авторитетность зерцал IT-шных наук. Я с интервалом в год имел удовольствие присутствовать на семинарах с участием 2-х главных светил в области хранилищ данных - Р.Кимбалла и Б.Инмона (который первый и ввел в обиход словосочетание ХД). Так у них чуть ли не диаметрально противоположные архитектурные подходы. Однако - у обоих десятки внедренных с успехом проектов уровня "Пентагон" за плечами. И еще пример из области ХД. Признанный лидер в области нитеграции - Informatica создала средство ETL Informatica Power Center, который служит для извлечения данных из БД-источников, их трансформации и загрузки в БД-приемники. Так вот - он работает на собственном сервере приложений и выполняет коды специализированных программ. А oracle Data Integrator и тем более Oracle Warehouse Builder, нацеленные на создание скриптов и процедур для исполнения СУБД, далеко отстают от Informatica.
-
> Да леГко! :) Только Савелия не предлагать. Я туда в разумное > время не доеду. > Мой ареал - между ЦАО и ВАО.
Э...пораньше бы :) Сдается мне, что на ближайшее время у меня будет строго САО.
Что касается примеров - оно все конструкторы, и ETL Informatica Power Center и "oracle Data Integrator и тем более Oracle Warehouse Builder" - то есть, дается полуфабрикат и пара дюжин напильников, которыми этот полуфабрикат доводится до приемлемого в использовании продукта. Может, оно и неплохо, может, и очень неплохо, но я веду речь о готовых продуктах, за которые конечный заказчик денег платит, разработкой каковых я, собственно, и занимаюсь. И делать в этом случае конструктор, прикладывая к нему кучу напильников, мне не слишком улыбается, еще и по той причине, что продукт довольно специализирован, знаний по предметке накоплено достаточно, узкие места и способы их обхода примерно известны. Так что заказчику проще приобрести оракл :)
-
Эээ. Вы давайте продолжать рассуждения о > Трудно поддерживать повторяемость в проектах под разные > СУБД.
и > Собственно, разрабатывать относительно большой проект под > разные СУБД особо большого смысла не имеет - получится "плохой > под разные СУБД" проект, слово "плохой" можно смело заменить > на "неоптимальный". >
О пиве и о местонахождении (географии административных округов) можно "потрепаться" в соответствующей конференции. :)
"По-ммедленнее, пожалуйста. Я записсываю." (с) Шурик
-
Я серьёзно. Я действительно "записываю". Для меня это весомый аргумент в разговоре с т.н. "техническим" "директором". И не случайно я поставил кавычки два раза.
-
> Германн © (26.08.08 02:01) [19] > > Я серьёзно. Я действительно "записываю". > Для меня это весомый аргумент в разговоре с т.н. "техническим" > "директором". > И не случайно я поставил кавычки два раза.
А что, собственно, надо оспорить или защитить? Я о "мультибазовых" проектах не упоминал. Но я не против них. Более того, я участвовал в одном таком. Просто не надо питать иллюзий, что можно создать коробочную версию системы, чтобы, типа, при установке она спросила: "На Вашем ПК обнаружены следующие 3 СУБД: ... Какую из них выбрать?". Просто если для кастомизации под конкретную СУБД потребуется 10% от проектного ресурса - это хороший результат. Но достичь его будет немыслимо, если серверную логику повесить на СУБД.
-
Курдль (26.08.08 09:23) [20]
> Просто если для кастомизации под конкретную СУБД потребуется > 10% от проектного ресурса - это хороший результат. Но достичь > его будет немыслимо, если серверную логику повесить на СУБД. >
Да, конечно, достичь такого результата немыслимо не только, если повесить логику на СУБД. СУБД, они не только имеют разные средства для создания серверной логики, они еще и ведут себя по-разному в отношениях с клиентами.
Опять же, процитирую Кайта: "Фундаментальные модели согласованности и управления параллелизмом разных баз данных радикально отличаются друг от друга. Последовательность операторов в одной базе данных может, а иногда и будет приводить к результату, отличному от результатов в другой базе данных".
Из этого, увы, следует, что для того, чтобы разрабатывать надежные приложения не зависящие от СУБД или делать "кастомизацию" под разные СУБД необходимо иметь в команде разработчиков людей, которые ориентируются во внутренностях конкретной СУБД, как поп в Ветхом законе.
Весьма вероятно, что твой вопрос в какой-то из СУБД (про поля в триггере) решается легко и просто, а вот в Oracle, увы, не решается, да оно и не надо :)
-
> Из этого, увы, следует, что для того, чтобы разрабатывать > надежные приложения не зависящие от СУБД или делать "кастомизацию" > под разные СУБД необходимо иметь в команде разработчиков > людей, которые ориентируются во внутренностях конкретной > СУБД, как поп в Ветхом законе.
Приведи пример (не касающийся оговоренного триггера). Матерые ораклисты с презрением смотрят на мой ораклевый код "...left outer join ... on ...". Однако, он в оракле работает ничуть не хуже, чем "(+) = ". (Кстати, СУБД оракл иногда ругается на нее, как на устаревшую). Где должна проявиться особо узкая специализация разработчиков? 99% запросов можно исполнить на классическом ANSI.
-
Курдль (26.08.08 11:28) [22]
> Приведи пример (не касающийся оговоренного триггера).
Том Кайт, "Эффективное проектирование приложений Oracle", стр. 17
> 99% запросов можно исполнить на классическом ANSI.
Исполнить можно. Результаты могут отличаться
> Матерые ораклисты с презрением смотрят на мой ораклевый > код "...left outer join ... on ...". Однако, он в оракле > работает ничуть не хуже, чем "(+) = ".
Ну это же просто синонимы...
-
> И че ? Есть заказчики, которые желают знать, кто именно > и что изменил. Их полное и неотъемлемое право
это уже все написано в логах. есть инструмент, чтоб логи разобрать. Нафига городить тыщу дурацких триггеров и тормозить базу?
-
> Petr V. Abramov © (26.08.08 12:19) [24] > > > > И че ? Есть заказчики, которые желают знать, кто именно > > и что изменил. Их полное и неотъемлемое право > > это уже все написано в логах. есть инструмент, чтоб логи > разобрать. Нафига городить тыщу дурацких триггеров и тормозить > базу?
Конгениально, коллега!
Только надо знать особенности организационной структуры и информационной безопасности в конкретной компании! Если логи доступны DB-админам, находящимся в другом конце города и вовсе не напрашивающимся (мягко говоря) на доп. работу?
А "торможение триггерами" могу себе представить только в хранилищах данных, где критичны периоды массовой загрузки информации. В OLTP-системах такой триггер отработает незаметно.
-
Petr V. Abramov © (26.08.08 12:19) [24]
>это уже все написано в логах. есть инструмент, чтоб логи разобрать. >Нафига городить тыщу дурацких триггеров и тормозить базу? Торможения нет проверялось...
А логи... если просмотр истории ситуация частая то не очень удобно в логи лазать каждый раз. Вобщем все от ситуации зависит в одном на логах нормально в другом и триггер сгенеренный не помешает.
-
Действительно на DATABASE OPTIONS DETAILS 18.09 кто еще идет? Я пока точно не знаю но с вероятностью 50% пойду
-
Удалено модератором
-
опять же: поле в таблице рпибавили/убавили. софт д.б. чтоб триггеры по крайней мере valid остались.
-
> Курдль (26.08.08 09:23) [20] > > А что, собственно, надо оспорить или защитить? ... > Просто не надо > питать иллюзий, что можно создать коробочную версию системы, > чтобы, типа, при установке она спросила: "На Вашем ПК обнаружены > следующие 3 СУБД: ... Какую из них выбрать?". >
Вот именно такие аргументы я и "записываю". Тем более если эти аргументы высказаны в подобной дискуссии.
-
Удалено модератором
-
Удалено модератором
-
> Германн © (27.08.08 01:33) [30] > Вот именно такие аргументы я и "записываю". Тем более если > эти аргументы высказаны в подобной дискуссии.
Тут Вам посоветовать ничего нельзя, не зная, что за приложение Вы разрабатываете. А вдруг какй-нибудь OLAP-продвинутый построитель отчетов? Тогда может и надо его под разные базы затачивать. Или, тем более, - среду ETL. Так ей сам Бог велел!..
-
> Курдль (27.08.08 12:39) [33] > > > > Германн © (27.08.08 01:33) [30] > > Вот именно такие аргументы я и "записываю". Тем более > если > > эти аргументы высказаны в подобной дискуссии. > > > Тут Вам посоветовать ничего нельзя, не зная, что за приложение > Вы разрабатываете. > А вдруг какй-нибудь OLAP-продвинутый построитель отчетов? > Тогда может и надо его под разные базы затачивать. Или, > тем более, - среду ETL. Так ей сам Бог велел!.. >
Я в последнее время ничего сам не разрабатываю. Ну в отношении программ для РС. Но я записываю подобные аргументы для представления их тем, кто хочет создать ПО, которое записывает в БД данные (и показывает их), причем "независимо" от провайдера и типа БД.
-
|