Конференция "Базы" » PL/SQL Цикл по полям.
 
  • Курдль (22.08.08 17:37) [0]
    Коллеги!
    Возможно ли в триггере организовать цикл по полям таблицы?
    Это нужно для замысловатого журналирования написать триггера почти на все таблицы, чтобы вычислять изменившиеся поля и писать их в логи. На SQL.ru искал решения - но нашел только такие же вопросы без ответов...
  • Правильный$Вася (22.08.08 18:36) [1]
    FOR x IN( SELECT * FROM User_Tab_Cols WHERE table_name = ...

  • Игорь Шевченко © (22.08.08 18:53) [2]

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


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

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

    проще триггер сгенерировать программно или использовать Oracle Workspace Manager для ведения истории записей
  • Труп Васи Доброго © (22.08.08 21:12) [3]

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

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

    А дальше делай что угодно.
    Такое ощущение, что либо ты не понимаешь что такое триггер и как он работает, либо ты не корректно описал задачу. Поясни плиз.
  • Игорь Шевченко © (23.08.08 09:35) [4]
    Труп Васи Доброго ©   (22.08.08 21:12) [3]

    То, что я предложил - это несколько нонсенс :)
  • Petr V. Abramov © (23.08.08 11:00) [5]

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

    тогда лучше в сторону logminer погляди
    http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_logmnr.htm#i79049
  • Petr V. Abramov © (23.08.08 12:04) [6]
    или 11g с Total Recall
    http://www.oracle.com/database/total-recall.html

    P.S.
    > Курдль
    на DATABASE OPTIONS DETAILS 18.09 пойдешь?
  • Курдль (25.08.08 09:34) [7]

    > А как ты себе это представляешь ?
    > 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:52) [8]
    Курдль   (25.08.08 09:34) [7]


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


    Я бы программно сгенерировал такой триггер (такие триггеры), а что - набор полей есть, логику ты знаешь, раз уж обычного AUDIT-а недостаточно
  • Petr V. Abramov © (25.08.08 11:32) [9]

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

    аудит
    > почти на все таблицы
    это жесть.
    так же, как и триггеры
  • Игорь Шевченко © (25.08.08 11:52) [10]
    Petr V. Abramov ©   (25.08.08 11:32) [9]


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


    И че ? Есть заказчики, которые желают знать, кто именно и что изменил. Их полное и неотъемлемое право
  • Курдль (25.08.08 13:22) [11]

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


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

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

    Чем тебе триггеры-то не угодили?
    Это, на мой взгляд, единственная ценность из всей серверной логики.
  • Игорь Шевченко © (25.08.08 14:57) [13]

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


    В серверной логике немножко больше ценностей, например, view и пакеты :)
    Но главная ценность в серверной логике - это то, что можно не гонять данные туда-сюда, обсчитывая ту самую логику.
  • Курдль (25.08.08 15:12) [14]

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

    Я уж спорил на эту тему с Ю.Зотовым и Petr V. Abramov за пивом.
    И мне казалось, что привел весомые аргументы.
    Гонять данные - это, конечно, не кошерно. И я против выполнения логики на клиенте. Я - за трехзвенку с мощным сервером приложений.
    Вот мои аргументы.
    1. В проекте накладно содержать много разнородных разработчиков.
    2. Трудно поддерживать повторяемость в проектах под разные СУБД.
    3. В то время, когда программирование продвинулось от процедурного к объектному, а уж не за горами и победа паттернов, - СУБД только делают неуклюжие попытки перейти к объектному программированию.
  • Игорь Шевченко © (25.08.08 16:45) [15]
    Курдль   (25.08.08 15:12) [14]


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


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


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


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

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

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

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

    Ну и кроме всего прочего, стоимость СУБД обычно несопоставима со стоимостью большого корпоративного приложения...
  • Курдль (25.08.08 17:24) [16]

    > Игорь Шевченко ©   (25.08.08 16:45) [15]
    > Будет желание и возможность - можешь и со мной за пивом поспорить.


    Да леГко! :)  Только Савелия не предлагать. Я туда в разумное время не доеду.
    Мой ареал - между ЦАО и ВАО.

    Кстати, я в своих аргументах против серверной логики о "мультибазовых" проектах не упоминал.
    Я говорил про технологическую вооруженность софтверной компании.
    Кайт - мужчинка уважаемый. Но он, кажись, и говорил, что "при проектировании БД самый худший враг - догматизм".
    Про авторитетность зерцал IT-шных наук. Я с интервалом в год имел удовольствие присутствовать на семинарах с участием 2-х главных светил в области хранилищ данных - Р.Кимбалла и Б.Инмона (который первый и ввел в обиход словосочетание ХД). Так у них чуть ли не диаметрально противоположные архитектурные подходы. Однако - у обоих десятки внедренных с успехом проектов уровня "Пентагон" за плечами.
    И еще пример из области ХД.
    Признанный лидер в области нитеграции - Informatica создала средство ETL Informatica Power Center, который служит для извлечения данных из БД-источников, их трансформации и загрузки в БД-приемники. Так вот - он работает на собственном сервере приложений и выполняет коды специализированных программ.
    А oracle Data Integrator и тем более Oracle Warehouse Builder, нацеленные на создание скриптов и процедур для исполнения СУБД, далеко отстают от Informatica.
  • Игорь Шевченко © (25.08.08 17:40) [17]

    > Да леГко! :)  Только Савелия не предлагать. Я туда в разумное
    > время не доеду.
    > Мой ареал - между ЦАО и ВАО.


    Э...пораньше бы :) Сдается мне, что на ближайшее время у меня будет строго САО.

    Что касается примеров - оно все конструкторы, и ETL Informatica Power Center и "oracle Data Integrator и тем более Oracle Warehouse Builder" - то есть, дается полуфабрикат и пара дюжин напильников, которыми этот полуфабрикат доводится до приемлемого в использовании продукта.
    Может, оно и неплохо, может, и очень неплохо, но я веду речь о готовых продуктах, за которые конечный заказчик денег платит, разработкой каковых я, собственно, и занимаюсь. И делать в этом случае конструктор, прикладывая к нему кучу напильников, мне не слишком улыбается, еще и по той причине, что продукт довольно специализирован, знаний по предметке накоплено достаточно, узкие места и способы их обхода примерно известны. Так что заказчику проще приобрести оракл :)
  • Германн © (26.08.08 01:49) [18]
    Эээ.
    Вы давайте продолжать рассуждения о
    > Трудно поддерживать повторяемость в проектах под разные
    > СУБД.

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

    О пиве и о местонахождении (географии административных округов) можно "потрепаться" в соответствующей конференции. :)

    "По-ммедленнее, пожалуйста. Я записсываю."
    (с) Шурик
  • Германн © (26.08.08 02:01) [19]
    Я серьёзно. Я действительно "записываю".
    Для меня это весомый аргумент в разговоре с т.н. "техническим" "директором".
    И не случайно я поставил кавычки два раза.
 
Конференция "Базы" » PL/SQL Цикл по полям.
Есть новые Нет новых   [134473   +28][b:0][p:0.001]