русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Следует проставить в поля mammals.height и birds.height соответствующие значения из animal_heights.


Дата добавления: 2015-08-31; просмотров: 637; Нарушение авторских прав


 

Напишем блок кода, решающий задачу. Для реализации left join в oracle существует возможность упрощенной записи с помощью знака '(+)', которую мы продемонстрируем. Update будем делать по rowid ради повышения скорости работы:

begin

for z in (select a.animal_name, a.height, m.rowid m_rowid, b.rowid b_rowid

from animal_heights a, mammals m, birds b

where a.animal_name = m.mammal_name(+)

and a.animal_name = b.bird_name(+)) loop

if z.m_rowid is not null then

update mammals set height = z.height where rowid = z.m_rowid;

end if;

if z.b_rowid is not null then

update birds set height = z.height where rowid = z.b_rowid;

end if;

end loop;

end;

 

Посмотрим результаты update-ов:

select * from mammals;

select * from birds;

Оператор MERGE.

Оператор MERGE работает так: есть порция вливаемых данных (SRC) и таблица-приемник, в которую мы их вливаем (DEST).

Если ключ в таблице-приемнике найден, то update-им другие поля в таблице-приемнике указанным образом.

Если же ключ в таблице-приемнике не найден, то insert-им в таблицу-приемник указанным образом.

MERGE еще иногда называют “update else insert” или “upsert”.

Подробнее мы разберем его в задаче ниже.

Задача. MERGE данных о студентах.

Создать пустую таблицу KK_STUDENTS_ALL_YEARS. С помощью оператора MERGE внести в нее сначала данные из таблицы KK_STUDENTS_2010, а потом из таблицы KK_STUDENTS_2012 (см. задачу “Сравнение множеств”).

 

Создадим пустую таблицу KK_STUDENTS_ALL_YEARS:

CREATE TABLE KK_STUDENTS_ALL_YEARS AS SELECT * FROM KK_STUD_2010 WHERE 0=1;

 

"Вмёржим" в KK_STUDENTS_ALL_YEARS данные за 2010 год. Будут только insert-ы:

MERGE INTO KK_STUDENTS_ALL_YEARS DEST

USING (SELECT ID, NAME FROM KK_STUD_2010) SRC

ON (DEST.ID = SRC.ID)



WHEN MATCHED THEN

UPDATE SET DEST.NAME = SRC.NAME

WHEN NOT MATCHED THEN

INSERT (DEST.ID, DEST.NAME) VALUES (SRC.ID, SRC.NAME);

 

Проверим результат:

SELECT * FROM KK_STUDENTS_ALL_YEARS;

 

Сменим фамилию одному из студентов (в 2012 году сменил фамилию), сохранив первичный ключ ID:

UPDATE KK_STUD_2012 SET NAME = 'ТРУНОВА' WHERE ID = 2;

 

"Вмёржим" в KK_STUDENTS_ALL_YEARS данные за 2012 год. Будут insert-ы и update-ы:

MERGE INTO KK_STUDENTS_ALL_YEARS DEST

USING (SELECT ID, NAME FROM KK_STUD_2012) SRC

ON (DEST.ID = SRC.ID)



WHEN MATCHED THEN

UPDATE SET DEST.NAME = SRC.NAME

WHEN NOT MATCHED THEN

INSERT (DEST.ID, DEST.NAME) VALUES (SRC.ID, SRC.NAME);

 

Проверим результат:

SELECT * FROM KK_STUDENTS_ALL_YEARS;

 

MERGE является одним из эффективных способов вливания дельты (порции изменившихся данных) в таблицу-приемник.



<== предыдущая лекция | следующая лекция ==>
У процедуры должно быть три OUT параметра - число совершенных inserts, deletes(disactivates), updates. | Написать оператор merge, который вливает данные из kk_clients_delta в kk_clients.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.07 сек.