Arşiv

Posts Tagged ‘dbms_random’

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.