10-05-2018, Saat: 09:26
(10-05-2018, Saat: 00:21)canbir Adlı Kullanıcıdan Alıntı: İki farklı Stored procedure ile yaptığım sorguyu birleştirmek istiyorum. Birşeyler yaptım ama iyi mi yaptım, faydasız veya kötü birşey mi yaptım bilemedim. Yaptığım şey mantıklı mı, hız ve performans açısından bir faydası olur mu?
AKTIF_DURUMU alanında 3 tip veri kaydettiriyorum:Aktif, Pasif,Ayrıldı. Sp'ler ile aktif ve ayrılış yapmamış(aktif+pasif toplamı) personellerin sayılarını alıyorum.
1. sp:// aktif çalışanların sayısını alıyorum.
begin
select count(*) from personel
where UNVANI=:UNVANI
AND GOREV_YERI=:GOREV_YERI
AND AKTIF_DURUMU='Aktif'
INTO :AKTIF;
suspend;
end
2. sp:// Ayrılış yapmamış personel sayılarını alıyorum.
begin
select count(*) from personel
where UNVANI=:UNVANI
AND GOREV_YERI=:GOREV_YERI
AND AKTIF_DURUMU<>'Ayrıldı'
INTO :MEVCUT;
suspend;
end
Birleştirdiğim Sp:
begin
select (select count(*) from personel where AKTIF_DURUMU='Aktif') as AKTIF, (select count(*) from personel where AKTIF_DURUMU<>'Ayrıldı') as MEVCUT from personel
where UNVANI=:UNVANI
AND GOREV_YERI=:GOREV_YERI
INTO :AKTIF,:MEVCUT;
suspend;
end
Bir count sorgusu tek satır döndürmesi gerekirken sizin sorgunuz potansiyel olarak onlarca satır döndürebilir ve performans olarak da pek iyi değil açıkçası. Aşağıdaki kodu bir inceleyin:
begin select count(case when aktif_durumu='Aktif' then id end) as aktif, count(case when aktif_durumu<>'Ayrıldı' then id end) as mevcut from personel where unvani=:unvani and gorev_yeri=:gorev_yeri into :aktif,:mevcut; suspend; end