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.