русс | укр

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

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

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

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


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

Написать оператор merge, который вливает данные из kk_clients_delta в kk_clients.


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


 

Заполним таблицы данными:

insert into kk_clients values (1,'Козлов Сергей','6605 700822');

insert into kk_clients values (2,'Стервятников Евгений','1390 193734');

insert into kk_clients values (3,'Баранов Илья','8808 848908');

insert into kk_clients values (4,'Шакалов Григорий','7209 888614');

insert into kk_clients values (5,'Крысин Роман','8976 616964');

insert into kk_clients values (6,'Змеев Игорь','5332 659236');

insert into kk_clients values (7,'Свиньин Абрам','1015 305818');

insert into kk_clients values (8,'Пиявкин Ираклий','7015 389388');

insert into kk_clients values (9,'Червяков Иосиф','3249 300256');

insert into kk_clients values (10,'Трутнев Абдулла','6950 327070');

 

insert into kk_clients_delta values (7,'Свиньин','Абрам','5587 324786');

insert into kk_clients_delta values (10,'Трутнев','Владимир','6950 327070');

insert into kk_clients_delta values (11,'Рыропротьев','Станислав','2901 849017');

 

merge into kk_clients dest

using (select * from kk_clients_delta) src

on (dest.id = src.id)

when matched then

update

set dest.name = src.firstname || ' ' || src.lastname,

dest.passport = src.passport

when not matched then

insert

values

(src.id, src.firstname || ' ' || src.lastname, src.passport);

 

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

select * from kk_clients;

 

Усложним задачу. Познакомимся с возможностью делать в рамках оператора merge нe только insert-ы, update-ы, но и delete-ы.

Добавим в таблицу kk_clients_delta поле status, принимающее значения: 'INSERTED' - для insert-ов и update-ов, а 'DELETED' - для delete-ов:

alter table kk_clients_delta add status varchar2(10);

 

Заполним kk_clients_delta новыми данными:

truncate table kk_clients_delta;

insert into kk_clients_delta values (12,'Андриянов','Андрей','3756 918622','INSERTED');



insert into kk_clients_delta values (3,'Баранов','Илья','3799 616345','INSERTED');

insert into kk_clients_delta values (5,'Крысин','Роман','8976 616964','DELETED');

 

Напишем оператор merge, который вставит id = 12, изменит паспорт у id = 3 и удалит id = 5:

MERGE INTO kk_clients DEST

USING (SELECT ID, firstname || ' ' || lastname name, passport, status

FROM kk_clients_delta) SRC

ON (DEST.ID = SRC.ID)

WHEN MATCHED THEN

UPDATE

SET DEST.NAME = SRC.NAME,

DEST.PASSPORT = SRC.PASSPORT

/*WHERE SRC.STATUS = 'INSERTED'*/

DELETE

WHERE SRC.STATUS = 'DELETED'

WHEN NOT MATCHED THEN

INSERT

(DEST.ID, DEST.NAME, DEST.PASSPORT)

VALUES

(SRC.ID, SRC.NAME, SRC.PASSPORT) WHERE SRC.STATUS = 'INSERTED';

 

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

select * from kk_clients;

 

Обратим внимание на закомментированную строку /*WHERE SRC.STATUS = 'INSERTED'*/. Если ее раскомментировать, код не будет выполнять желаемые изменения, что является загадочной особенностью oracle.



<== предыдущая лекция | следующая лекция ==>
Следует проставить в поля mammals.height и birds.height соответствующие значения из animal_heights. | Функции по работе с датами.


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


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

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

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


 


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

 
 

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

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