Merhaba,
Pl/sql ortamında ya da oracle forms içindeki hazırladığımız sql lerde subquery kullanımlarında birden fazla kayıt gelmesi durumunda ora-01427 hatası alınır.Örnek olarak aşağıdaki sql ler kontrol edilebilinir.
SELECT * FROM all_users
WHERE username = (SELECT owner FROM all_tables
WHERE owner = 'SYS');
Bu sql çalıştığı zaman ora-01427 hatası alınır.Bu hatanın alınmasının sebebi subquery olarak kullandığımız
SELECT owner FROM all_tables
WHERE owner = 'SYS';
sqlinden birden fazla satır gelmesindendir. Ama bu sqli subquery olarak kullandığımızda ” = ” değil de ” in ” yapısı ile kullanırsak bu hatayı almayız.Mevcut sql aşağıdaki gibi değiştirildiğinde hata alınmadığı ve sql den sonuç geldiği görülebilinir.
SELECT * FROM all_users
WHERE username IN (SELECT owner FROM all_tables
WHERE owner = 'SYS');
Bu ve benzeri durumlar için hazırladığımız subquery den kaç satır geleceğini bilmediğimiz durumlarda in yapısı exists yapısı ya da ön bir kontrol sqli ile bu hatanın alınması engellenebilir ve doğru sonuca ulaşılabilinir.
Kolay gelsin.
38.385900
27.179700
Like this:
One blogger likes this post.
Merhaba pl/sql de in ve exists kullanımına birer örnek.
SELECT t1.column_1,
t1.column_2
FROM table_1 t1
WHERE t1.column_1 IN (SELECT t2.column_3 FROM table_2 t2);
SELECT t1.column_1,
t1.column_2
FROM table_1 t1
WHERE t1.column_1 NOT IN (SELECT t2.column_3 FROM table_2 t2);
SELECT t1.column_1,
t1.column_2
FROM table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t1.column_1 = t2.column_3);
SELECT t1.column_1,
t1.column_2
FROM table_1 t1
WHERE NOT EXISTS (SELECT * FROM table_2 t2 WHERE t1.column_1 = t2.column_3);
Bu kullanımları biraz açıklamak gerekirse yazılan bir sql de in kullanımı ile exists kullanımı basit bir sql de performans olarak çok fazla ayırt edilemez.Ama daha yoğun bir sql yazıldığında in ve exists kullanımı arasındaki performans farkı ortaya çıkacaktır.Peki nedir bu in ve exists arasındaki fark.Hemen anlatalım.
in yazılan subquery den dönen tüm kayıtlar içinde eşleme yaptıktan sonra ana query nin çalışmasını tamamlar.
exists ise subquery yi eşleme yapılan kayıtlara göre sonuçlandırır ve ilave olarak gelen kayıtlar içinde eşleme yapmaya gerek kalmaz.exists zaten subquery den ihtiyacı olan kayıtları getirmiş olacaktır.
Bu yüzden yoğun sql lerde performans sağlanması için in yerine exists kullanımı tercih edilmektedir.
38.385900
27.179700
Like this:
One blogger likes this post.