Arşiv

Posts Tagged ‘pl sql’

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 pascal üçgeni oluşturma


Merhaba

Daha önce pl/sql de fibonacci sayı dizisini oluşturma işlemini anlatmıştım. Şimdi sıra pl/sql ile pascal üçgeni oluşturma işlemine geldi. Aşağıdaki görüntülerde de görüldüğü gib bir pascal üçgeni işlemini bizde pl/sql ile yapalım.

DECLARE
  sonuc   VARCHAR2(1000);
  deger_x NUMBER;
  deger_y NUMBER;
BEGIN
  FOR j IN 0 .. 5 LOOP
    sonuc   := sonuc || chr(13) || '1';
    deger_x := j;
    deger_y := 1;
    FOR i IN 1 .. deger_x LOOP
      deger_y := (deger_x * deger_y) / i;
      sonuc   := sonuc || ' ' || deger_y;
      deger_x := deger_x - 1;
    END LOOP;
  END LOOP;
  dbms_output.put_line(sonuc);
END;

Yazdığımız bu kodlar sonrasında ise aşağıdaki gibi bir pascal üçgeni sonucu elde etmiş olacağız.

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

Kolay gelsin.

pl/slq de fibonacci sayı dizisini oluşturma


Merhaba
Hayatında herkes Fibonacci sayı dizisini duymuştur. Bu konuda detaylı bilgi Leonardo Fibonacci linkinden ve özet ve basit bilgiyi ise Fibonacci Dizisi adresinden görebilirsiniz.
Bilindiği gibi Fibonacci dizisi bir matematiksel işlemdir. Herhangi bir programlama dili ile bu dizi rahatlıkla oluşturulabilinir.Fibonacci dizisinin temel formülü F(n-1)+F(n-2) şeklindedir. Pl/Sql ile de bir Fibonacci dizisi oluşturabiliriz.

DECLARE
  fibo VARCHAR2(4000);

  FUNCTION fibonacci(n NUMBER) RETURN NUMBER IS
  BEGIN
    IF n = 0 OR n = 1 THEN
      RETURN n;
    ELSE
      RETURN fibonacci(n - 1) + fibonacci(n - 2);
    END IF;
  END;

BEGIN
  FOR i IN 0 .. 20 LOOP
    fibo := fibo || fibonacci(i) || ' ';
  END LOOP;
  dbms_output.put_line(fibo);
END;

Ben örnek olarak 0-20 arasındaki sayılar için Fibonacci dizisi oluşturdum fakat bilindiği gibi Fibonacci dizisi herhangi bir sayıdan başlanılarak da oluşturulabilinir.

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 

0-20 arasındaki sayılar için yukarıda gibi bir Fibonacci dizisi oluşurken bu işlemi 5-20 arasında yaparsak bahsettiğim herhangi bir sayıdan başlanıp Fibonacci dizi oluşturulduğunu ve değerlerin değişmediğini görelim.

DECLARE
  fibo VARCHAR2(4000);

  FUNCTION fibonacci(n NUMBER) RETURN NUMBER IS
  BEGIN
    IF n = 0 OR n = 1 THEN
      RETURN n;
    ELSE
      RETURN fibonacci(n - 1) + fibonacci(n - 2);
    END IF;
  END;

BEGIN
  FOR i IN 5 .. 20 LOOP
    fibo := fibo || fibonacci(i) || ' ';
  END LOOP;
  dbms_output.put_line(fibo);
END;
5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 

Görüldüğü gibi dizide başlangıç değeri dışında değişen bir durum olmadı. Genel Fibonacci dizisi kuralı olan F(n-1)+F(n-2) durumu ile yazılım dili ne olursa olsun istenilen Fibonacci dizisi oluşturulabilinir.
NOT: Kodlarda da göreceğiniz gibi F(n-1)+F(n-2) işlemi yapmak için n>1 olması gerekiyor. n=1 ya da n=0 olduğu durumda kodlarda görülen işlemi yapmak n değerini olduğu gibi kullanmak gerekir.
Kolay gelsin.