Friday, June 5, 2009

MERGE

MERGE INTO
USING
ON ()
WHEN MATCHED THEN
DELETE
WHEN NOT MATCHED THEN
[LOG ERRORS ];


bir tablodan diğer tabloya veri kopyalarken, hedef tabloda verilen kriterlere uygun kayıtların olup olmadığına bakar, kriterlere uygun kayıt varsa UPDATE ile kaydı günceller, eğer kayıt yoksa kaynak tablodan verileri alarak hedef tabloya INSERT eder.
 update tablom set col1 = 'aliates'
where tab_id = 11 ;
if Sql%Rowcount = 0 then
insert ....
end if;
/////////////////////////////////////////////////////////////////////////////////////

MERGE INTO employee e --hedef tablo
USING new_employee ne ON ( --kaynak tablo
e.id = ne.id --koşulumuz
)
WHEN NOT MATCHED THEN --eğer eşleşen yok ise kaynaktan hedefe aktarım yapıyor.
INSERT (e.id, e.first_name, e.last_name, e.description, e.salary)
VALUES (ne.id,ne.first_name,ne.last_name,ne.description,ne.salary);
///////////////////////////////////////////////////////////////////////////////////////
drop table kaynak_tablo

drop table hedef_tablo

create table kaynak_tablo (sutun1 number, sutun2 number);

create table hedef_tablo (sutun1 number, sutun2 number);

declare
x number;
begin
x:=66;
for i in 1..10 loop
insert into hedef_tablo values(i,x);
end loop;
end;


declare
x number;
begin
x:=67;
for i in 1..10 loop
insert into kaynak_tablo values(i,x);
end loop;
end;




MERGE INTO hedef_tablo h
USING (select * from kaynak_tablo ) k
ON (k.sutun1 = h.sutun2)
WHEN MATCHED THEN
UPDATE
SET h.sutun1 = 22 --burada ON (k.sutun1 = h.sutun2) işleminde kullanulan satiri update edemezsiniz.

WHEN NOT MATCHED THEN
INSERT (sutun1 , sutun2)
VALUES (5,9)


MERGE INTO hedef_tablo h
USING (select * from kaynak_tablo ) k
ON (k.sutun1 = h.sutun2)
WHEN MATCHED THEN
UPDATE
SET h.sutun1 =1
delete where (h.sutun2 = 2)
WHEN NOT MATCHED THEN
INSERT (sutun1 , sutun2)
VALUES (5,9)


çok güzel özet bir anlatim fazla söze gerek yok. Ben sadece birkaç örnek vereceğim buradakinden farklı olarak.
http://www.gokhanatil.com/merge-komutu/

http://www.java2s.com/Tutorial/Oracle/0120__Table/0100__Merge.htm

No comments: