1. Lebih lama karena ada proses searching (where field1 = data1) pada statment
pertama, sedangkan
yang kedua hanya insert saja. jadi masuk akal apabila lebih lama 2x lipat,
terlebih apabila datanya cukup besar
dan melakukan pencarian pada banyak partisi. dapat lebih di optimasi dengan
menggunakan query yang lebih efisien, dan memperkecil LIO(Logical IO)
2. Untuk 9i dan 10g ada fasilitas baru disebut merge untuk menfasilitasi proses
upsert.
MERGE INTO newemp n1 --Source table yang ingin di upsert
USING external_table e1 --Target table sebagai perbandingan
ON ( n1.empno = e1.empno ) --Perbandingannya
WHEN MATCHED THEN UPDATE --Kalau ketemu maka di update
SET n1.empno = e1.empno,
n1.ename = e1.ename,
n1.job = e1.job,
n1.mgr = e1.mgr,
n1.hiredate = e1.hiredate,
n1.sal = e1.sal,
n1.comm = e1.comm,
n1.deptno = e1.deptno
WHEN NOT MATCHED THEN -- Kalau tidak ketemu makan di insert kan
INSERT ( empno, ename, job, mgr, hiredate, sal, comm, deptno )
values ( e1.empno,
e1.ename,
e1.job,
e1.mgr,
e1.hiredate,
e1.sal,
e1.comm,
e1.deptno )
/
OBL
*********** REPLY SEPARATOR ***********
On 13/01/2005 at 9:04 AM SIMASDAM wrote:
Dear netters...
Saya mau updating table dengan cara
UPDATE table
SET field2 = data2, field3 = data3
WHERE field1 = data1;
IF SQL%NOTFOUND THEN
INSERT INTO table
(field1,field2,field3)
VALUES
(data1,data2,data3);
END IF;
Namun performance-nya (dalam hal ini waktu yang dibutuhkan, berdasarkan
pengamatan kasar melalui penunjuk waktu) lebih lama (hampir 2 x
lipat)dibanding langsung insert data.
INSERT INTO table
(field1,field2,field3)
VALUES
(data1,data2,data3);
1
Pertanyaan saya
1. mengapa perbedaan waktunya sangat signifikan.
2. apakah ada cara lain yang bisa saya lakukan untuk update
sekaligus insert kalau datanya tidak ditemukan.
Mohon maaf kalau pertanyaannya sudah pernah ada.
Terima kasih atas jawabannya.
--
-----------I.N.D.O - O.R.A.C.L.E---------------
Keluar: [EMAIL PROTECTED]
Website: http://indo-oracle.blogspot.com
-----------------------------------------------
Bergabung dengan Indonesia Thin Client User Groups,
Terminal Server, Citrix, New Moon Caneveral, di:
http://indo-thin.vze.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/indo-oracle/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/