Etiket arşivi: rowid tekrar eden kayıtları silmek

Oracle ROWID Nedir?

ORACLE ROWID NEDİR?

Satırın database’deki fiziksel adresini gösteren pointerdır,pseudo bir kolondur.ROWID 10 byte string tutar.Select çektiğimizde gözükmez ama görmek istersek:

SQL> SELECT  ROWID,* FROM HR.EMPLOYEES;
şeklinde görebiliriz..

Oracle’da en hızlı arama şekli rowid ile yapılan aramadır çünkü datanın fiziksel adresini tutar.Güncelleme,silme işlemlerinde kullanılabilir, çünkü satır girilmiş ve bir rowid almıştır.İşlem yapılacak kayıt bulunup rowidsi alınarak silme,güncelleme işlemi rowid üzerinden yapılabilir ve gayet
de hızlı olur.Yalnız bu işlem boyunca satırın rowid’si değişmemeli.Çünkü rowid değeri tablo ve blok yapısına göre değişebilir.

ROWID tekrar eden kayıtları silerken de işimize yarar, çünkü silerken baz alacağımız değerler aynıysa farklı unique bir değere ihtiyacımız vardır, bu durumda da rowid’yi kullanabiliriz.

SQL> DELETE FROM emp E WHERE E.rowid>(SELECT MIN (x.rowid)
FROM emp X WHERE X.emp_no = E.emp_no);

Tekrar Eden Kayıtları Silmek

Tekrar eden kayıtları silmek-sql

Rowid kullanarak tekrar eden kayıtları silelim.
-Test işlemleri için bir tablo create edelim..

Create table TEST_TAB
(
kisi_id NUMBER,
ad      VARCHAR2(100),
soyad   VARCHAR2(100)
);

-Tablomuza deneme kayıtları girelim.

1 numaralı kayıt 3 defa tekrar ederken,3 numaralı kayıt 2 defa tekrar ediyor, diğerleri tekil.

INSERT INTO TEST_TAB values(1,'ÖMER','ACAR');
INSERT INTO TEST_TAB values(1,'ÖMER','ACAR');
INSERT INTO TEST_TAB values(1,'ÖMER','ACAR');
INSERT INTO TEST_TAB values(2,'AYŞE','DEMİR');
INSERT INTO TEST_TAB values(3,'ALİ','AYDIN');
INSERT INTO TEST_TAB values(3,'ALİ','AYDIN');
INSERT INTO TEST_TAB values(4,'KORHAN','ÇELİK');
INSERT INTO TEST_TAB values(5,'ZEYNEP','GÜL');
INSERT INTO TEST_TAB values(6,'FERİDUN','ÇAKMAK');
INSERT INTO TEST_TAB values(7,'SEDA','ÇAKMAK');
INSERT INTO TEST_TAB values(8,'FATİH','TÜZÜN');

– Tablomuz;

Rowid ile tekrar eden kayıtları silmek

Tekrar eden kayıtlar

-Silinecek kayıtların listesi

 SELECT * FROM test_tab x WHERE x.rowid > 
(SELECT MIN(y.rowid) FROM test_tab y WHERE x.kisi_id=y.kisi_id)
Tekrar eden silenecek kayıtlar, rowid

Tekrar eden silenecek kayıtlar

-Mükerrer kayıtları silelim

DELETE FROM test_tab x
WHERE x.rowid > (SELECT MIN(y.rowid) FROM test_tab y
WHERE x.kisi_id=y.kisi_id)

-Sildikten sonra tablomuz;

Select * from TEST_TAB t;
3

Tekrar eden kayıtları sildikten sonraki temiz liste

Burda dikkat etmemiz gereken ben silme işlemini yaparken kisi_id alanı tekrar edenleri sildim.(delete’in where kısmı) siz bir kaç alanın daha tekrarına bakıyorsanız bunları da where kısmına eklemeniz gerekiyor)

Örneğin hem adı hem soyadı tekrar edenleri silelim dersek ;

DELETE FROM test_tab x
WHERE x.rowid > (SELECT MIN(y.rowid) FROM test_tab y
WHERE x.ad=y.ad
and   x.soyad=y.soyad)