pl/sql de goto kullanımı
Merhaba
Pl/Sql ortamında yazdığımız programlar içerisinde bir kontrolü tekrar tekrar belirli bir şarta göre yapmamız gerekebilir. Bunun için değişik yöntemler kullanırız , belki de hiç yapmamamız geken işlemi yapar aynı kodları tekrar tekrar yazarız. Ama artık bu işleme gerek kalkmadı.Pl/Sql içinde goto kullanımı ile isteğimiz mantıksal kontrolü istediğimiz şarta bağlı olarak çalıştırabiliriz.
Goto söz dizimi olarak aşağıdaki gibi kullanılır. “<<“ ve “>>” ifadeleri arasına yazılan etiket(label) bilgisi bizim goto işlemini kullanırken ihtiyacımız olan etiket bilgisidir.
<<label>>
…
… işlemlerimiz
…
goto label
Örnek olarak bu işlemin daha iyi anlaşılması için pl/sql de basit bir declare yazalım ve 1 ile 10 arasında rasgele sayı üretelim. Ürettiğimiz bu rasgele sayı 2 olana kadar bu işlemi tekrarlayayım.
Aşağıda hazırladığımız declare mevcuttur.
DECLARE deger NUMBER; BEGIN <<tekrar_dene>> deger := round(dbms_random.value(1, 10)); IF deger = 2 THEN dbms_output.put_line('deger:2 bulundu'); ELSE dbms_output.put_line('deger:' || deger); GOTO tekrar_dene; END IF; END;
Declare yazıp çalıştırdıktan sonra artık goto kullanımının sonuçlarını görebiliriz. Benim test ederken aldığım rasgele sayı üretim sonuçları sizin test işleminizde aynı olmayabilir. Bu kod çalıştığında çıkan sonuç aşağıdaki gibidir.
deger:6 deger:8 deger:6 deger:10 deger:10 deger:7 deger:1 deger:4 deger:7 deger:9 deger:2 bulundu
İlk deneme için çıkan sonuçları yukarıdaki gibidir. Birde ikinci kez deneyelim ve farkı net olarak görelim.
deger:6 deger:4 deger:7 deger:7 deger:3 deger:3 deger:10 deger:5 deger:10 deger:10 deger:7 deger:9 deger:3 deger:8 deger:7 deger:9 deger:6 deger:1 deger:7 deger:8 deger:3 deger:6 deger:3 deger:7 deger:5 deger:1 deger:4 deger:6 deger:6 deger:2 bulundu
Kolay gelsin.
pl/sql de case when kullanımı örnek
Merhaba,
Bazı durumlarda kullanıdığımız sql içinde şartlı kontrol yapmamız gerekebilir.Bu durumlar için case yapısını kullanırız. Örnek olarak 10 adet rasgele sayı üren bir sql de üretilen sayıların 1 ve 2 ye eşit olma ve eşit olmama durumlarını kontrol eden bir case yapılı sql hazırlayalım.
SELECT rnd_sayi, CASE WHEN rnd_sayi = 1 THEN 'Sayı 1' WHEN rnd_sayi = 2 THEN 'Sayı 2' ELSE 'Sayı 1 ve 2 den farklı' END sayi FROM (SELECT trunc(dbms_random.value(1, 10)) rnd_sayi FROM dual CONNECT BY rownum <= 10);
Bu sql in çıktısı aşağıdaki gibidir. Tabi burada sayılar rasgele üretildiği için bu sql her çalıştığında sonuçlar farklı olacaktır.