Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 обновление таблицы на основе данных другой, выделение новых и измененных  [new]
Alien Sky
Member

Откуда:
Сообщений: 15
Всем привет!
Есть такая задача:
таблица 1 (табл.1)- основная (боевая, рабочая)
таблица 2 (табл.2) - таблица временных данных, сюда загружаются все обновления
цель следующая - проанализировать таблицу 1 и т. 2
и 1. если в табл.2 есть значения которых нет в табл.1, то скопировать эти значения в табл.1 из табл.2
2. если подобные значения уже существуют в табл.1, но изменились некоторые поля, то в табл. 1 
пометить изменение (есть спец. поле), а измененную строку из табл.2 скопировать в табл.1.
3.если в результате анализа выяснится, что в табл.1 есть значения, которых нет в табл.2, 
то эти строки в табл.1 также нужно пометить (спец.поле)
.
строк может быть до 200 тыс. единовременно, 
через курсоры работает очень долго (не удивительно собственно - цикл в цикле, хотя может быть алгоритм?).
Возможно методы, хотелось бы их услышать. Спасибо

Oracle 8.1.7.4.1
25 сен 07, 04:03    [4709164]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
х.з.
Member

Откуда:
Сообщений: 765
правильно ли я понял, что все колбасят куда хотят (в любую из таблиц). причем иногда не по детски (200 тыс. записей за раз). а вы вместо того чтобы навести порядок в бизнес логике, хотите быстро бардак засинхронизировать?

тригеры на DML операции на этих таблицах ?
25 сен 07, 04:25    [4709169]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
Alien Sky
Member

Откуда:
Сообщений: 15
х.з.
правильно ли я понял, что все колбасят куда хотят (в любую из таблиц). причем иногда не по детски (200 тыс. записей за раз). а вы вместо того чтобы навести порядок в бизнес логике, хотите быстро бардак засинхронизировать?

тригеры на DML операции на этих таблицах ?

не совсем правильно, "колбасят" в одну табл.2.
мне нужно из этой временной таблицы выгружать по описанному принципу данные в табл.1.
Необходимо принять во внимание, что повлиять на загрузку в табл. 2 я не имею возможности (потому что данные поставляются другой структурой).
Какие будут sql-предложения?
25 сен 07, 04:58    [4709175]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
Alien Sky
Member

Откуда:
Сообщений: 15
х.з.
тригеры на DML операции на этих таблицах ?

DML? можно ссылочку на русскоязычный фак?
25 сен 07, 05:00    [4709176]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
Alien Sky
Member

Откуда:
Сообщений: 15
данные грузятся в табл.2 sqlloader ом, довольно быстро,
т.е. вы предлагаете настроить триггер на срабатывание каждый раз при записи новой строки?
Как Вы думаете, что будет быстрее sql процедура просматривающая все селектами инсертами, или триггер?
25 сен 07, 05:18    [4709185]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
х.з.
Member

Откуда:
Сообщений: 765
Alien Sky
не совсем правильно, "колбасят" в одну табл.2.

тогда у вас не должно быть варианта 2,3

тригер, например, не позволит отложить вставку в таб1. на потом

не будет никаких sql предложений пока вы сами не приложите усилия (какие - подумайте)
25 сен 07, 05:33    [4709188]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
Alien Sky
Member

Откуда:
Сообщений: 15
если уже ктото решал это, то он может поделиться опытом, и тогда может быть мне
не придется изобретать велосипед.
я сам конечно пытаюсь, но кроме курсоров пока ничего.
просто я больше писал на дельфи.. там как бы железная логика :-)
а здесь язык структурированных запросов..
25 сен 07, 05:39    [4709190]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
х.з.
Member

Откуда:
Сообщений: 765
логика, она в голве а не в дельфи :)

повторю последний раз тригера на tab2
25 сен 07, 05:47    [4709193]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
трындолёт
Guest
IMHO, задачу можно свести к банальному апдейту и инсерту.
То есть, идея примерно такая:
1) Делаем инсерт в первую таблицу всего того, чего в ней нет или того, что в ней изменилось.
2) Апдейтим в первой таблице нужные строки (те что изменились или те, которых изначально не было во второй таблице)
25 сен 07, 05:50    [4709194]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
Alien Sky
Member

Откуда:
Сообщений: 15
:-)
попробуем
25 сен 07, 05:50    [4709195]     Ответить | Цитировать Сообщить модератору
 Re: обновление таблицы на основе данных другой, выделение новых и измененных  [new]
Alien Sky
Member

Откуда:
Сообщений: 15
трындолёт

1) Делаем инсерт в первую таблицу всего того, чего в ней нет или того, что в ней изменилось.
2) Апдейтим в первой таблице нужные строки (те что изменились или те, которых изначально не было во второй таблице)

в принципе вариант, только тогда проще переписать ВСЕ в табл.1
удалить дубликаты, и провести соответствие по полям которые изменились...
только выглядит уж как то слишком ненадежно, данные в таблице табл1. очень важны
хотелось бы на момент ввода значений контролировать данные...
25 сен 07, 06:00    [4709199]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить