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

Необходимо написать процедуру, зависящую от выбранной пользователем условием по дате dat1, в которой будет происходить добавление данных в таблицу main_table, удоволетворяющих определенным условиям, при этом также будет происходить удаление данных из таблицы main_table, которые уже просрочены, в зависимости от даты dat1.

Есть 3 таблицы:
table1(id1, column1, column2),
table2(id2, column3, column4), 
main_table(main_id, column1, column4, column5, column6)

Что быстрее?

1) в процедуре написать cursor на вставку данных, удоволетворяющим условиям по dat1, column1, column2, column3, column4, т.е не создавая никаких таблиц записывать в cursor попадающие под условия данные, которые соответственно вставляется в
 main_table(main_seq.nextval, cursor_column1, cursor_column4, 'EEE', 'BBB')
При этом удалять "старые" данные из main_table каждый раз до insert в main_table новых данных.

2) создать index на main_id, column1, создать временную таблицу
main_two_table(main_id, column1, column4, column5, column6)
и далее написать процедуру, где надо будет вставлять новые данные, удоволетворяющие нужным условиям по dat1, column1, column2, column3, column4 в эту временную таблицу, удалять "старые" данные из main_table, и вставлять уже новые данные в
main_table as select * from main_two_table.
25 мар 10, 23:06    [8535062]     Ответить | Цитировать Сообщить модератору
 Re: Cursor vs Временная Table  [new]
CursorCast
Guest
oops маленькая неточность... Извиняюсь.
В 1)
main_table(main_seq.nextval, cursor_id1, cursor_id2, cursor_column1, cursor_column4, 'EEE', 'BBB')
2) создать index на main_id, cursor_id1, создать временную таблицу, а также
main_two_table(main_id, id1, id2, column1, column4, column5, column6)
25 мар 10, 23:11    [8535072]     Ответить | Цитировать Сообщить модератору
 Re: Cursor vs Временная Table  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
В Вашем случае быстрее всего - реализовать логику наиболее прозрачным методом.
Затем садиться изучать матчасть по официальной документации, много думать.

...когда снизойдет просветление, вернётесь сюда и сами над собой вволю повеселитесь.
25 мар 10, 23:58    [8535174]     Ответить | Цитировать Сообщить модератору
 Re: Cursor vs Временная Table  [new]
CursorCast
Guest
В моем, не моем случае... Если бы был Гуру, то не спрашивал, а написал как лучше.
Просьба для просветления скинуть соответствующий материал, если Вас не затруднит, пожалуйста.
Благодарю.
26 мар 10, 08:00    [8535463]     Ответить | Цитировать Сообщить модератору
 Re: Cursor vs Временная Table  [new]
=Коллега=
Member

Откуда: оттуда
Сообщений: 17
ИМХО лучше сначала вставить, потом удалить и впоследствии все закомитить ;)
Все зависит от объема добавляемых/удаляемых данных и размеров undo.
Быстрее всего сделать все 2 простыми запросами insert, потом delete. Если объем данных достаточно большой, то придется вставлять частями, а потом удалять также частями, в промежутках проводя фиксацию.
26 мар 10, 08:05    [8535470]     Ответить | Цитировать Сообщить модератору
 Re: Cursor vs Временная Table  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
CursorCast,

Oracle® Database SQL Language Reference, MERGE

автор
Если бы был Гуру, то не спрашивал, а написал как лучше

Как объяснить бушмену, почему нельзя попасть стрелой в Солнце? ©Шекли Р., Верный ответ
26 мар 10, 09:29    [8535732]     Ответить | Цитировать Сообщить модератору
 Re: Cursor vs Временная Table  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
CursorCast,

И на будущее, дабы не возникало измышлизмов "был бы Гуру..." RTFM
26 мар 10, 09:32    [8535745]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить