Arşiv

Archive for the ‘PL/SQL’ Category

oracle forms da ole ile excel oluşturma

Merhaba
Oracle Forms ile hazırladığımız ekranlarda çoğu zaman Excel çıktısı almamız gerekir ve bu işlemi faklı yöntemler ile yapabiliriz.Bu yazımızda Excel çıktısı almak için Oracle Forms içinde bulunan ole2 ole objesini kullanarak Excel çıktısı hazırlayacağız. Öncelikle bu işlemi yapabilmek ve kontrolün takibini sağlamak için Excel oluşturma işlemlerini parça parça olarak prosedür halinde hazırlayıp kullanalım.
İlk olarak istediğimiz verileri Excel’e aktaracak olan prosedürümüzü yazalım.

PROCEDURE excel_aktar(worksheet IN ole2.obj_type,
                      satir     IN NUMBER,
                      sutun     IN VARCHAR2,
                      format    IN VARCHAR2,
                      deger     IN VARCHAR2) IS

  args ole2.list_type;
  cell ole2.obj_type;
BEGIN
  args := ole2.create_arglist;
  ole2.add_arg(args, satir);
  ole2.add_arg(args, sutun);
  cell := ole2.get_obj_property(worksheet, 'Cells', args);
  ole2.destroy_arglist(args);
  ole2.set_property(cell, 'NumberFormat', format);
  ole2.set_property(cell, 'Value', deger);
  ole2.release_obj(cell);
END;

Devamını oku…

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.

dinamik ve statik sql

Merhaba
Dinamik ve static sql kullanımı hakkında güzel bir çalışma olmuş. Yoğun ve büyük projelerde önemli ölçüde dikkate alınması ve kontrol edilmesi gereken konularda detaylı bilgiler mevcut. Özellikle dinamik ve statik sql arasındaki farkın geçen zaman olarak gösterilmesi ne kadar performans kaybı yaşadığımızı ya da kazandığımızı net olarak gösteriyor.

Kolay gelsin

Categories: E-Book, PL/SQL Etiketler:, , , , , , ,

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.

pl/sql ile crypto işlemi yapmak

Merhaba
Geliştirdiğimiz ya da üzerinde düzenleme yaptığımız uygulamalar içinde ihtiyacımız olduğunda “crypto” işlemi yaparız. Bu işlem bazen şifre saklama ,bazen bir metni gizleme ,çoğu zaman için ise güvenlik sebebi ile kullanılır.PL/Sql ortamında crypto işlemi yapabilmek için birden farklı yöntemler mevcuttur. Örneğin md5,base64 gibi. Hatırlarsanız base64 ile encode ve decode işlemini size anlatmıştım. Şimdi sistemde var olan bu bu örnek crypto işlemleri yerine kendimiz bir crypto işlemi yapabiliriz.
Kendi crypto sistemimizi yapmak için ileri derecede matematik ve algoritma bilmemize gerek yok. Çok üst seviye ve çözülmesi zor olan bir güvenliğe sahip crypto işlemi yapmayacağız için bu basit ve anlaşılır olan mantığı istediğiniz zaman ve kendinize uyarlayıp kullanabilirsiniz.
Şimdi isterseniz istediğimiz metni ya da herhangi bir sayısal ifadeyi kendi hazırladığımız crypto sistemi ile şifreleyelim.
Ben bu işlem için bir package hazırladım ve package içinde istediğimiz metni ya da sayısal ifadeyi kendi oluşturduğumuz crypto sistemi ile şifrelemek ve şifreli içeriği çözmek için fonksiyonlar mevcut.
Öncelikle package spec kısmını hazırlayalım.

CREATE OR REPLACE PACKAGE smt.plsql_crypto IS

  -- Author  : CELIKBICAK
  -- Created : 01.01.2012 14:54:44
  -- Purpose : Kendi crypto işlemimiz ile veri şifrelemek ve şifreli veriyi çözmek
  FUNCTION sifrele(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2;
  FUNCTION coz(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2;

END plsql_crypto;

Spec kısmı hazır olduğuna göre şimdi package body kısmını hazırlayalım.

CREATE OR REPLACE PACKAGE BODY smt.plsql_crypto IS

  FUNCTION sifrele(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2 IS
    crypto_str    VARCHAR2(4000);
    temp_str      VARCHAR2(30);
    crypto_length NUMBER;
  BEGIN
    crypto_length := length(anahtar);
    FOR i IN 1 .. length(metin) LOOP
      temp_str   := substr(metin, i, 1);
      crypto_str := crypto_str || chr(ascii(temp_str) - crypto_length);
    END LOOP;
    RETURN(crypto_str);
  END sifrele;
  /**-----------------------------------------------------------------------------------**/
  FUNCTION coz(metin VARCHAR2, anahtar VARCHAR2) RETURN VARCHAR2 IS
    crypto_str    VARCHAR2(4000);
    temp_str      VARCHAR2(30);
    crypto_length NUMBER;
  BEGIN
    crypto_length := length(anahtar);
    FOR i IN 1 .. length(metin) LOOP
      temp_str   := substr(metin, i, 1);
      crypto_str := crypto_str || chr(ascii(temp_str) + crypto_length);
    END LOOP;
    RETURN(crypto_str);
  END coz;

BEGIN
  NULL;
END plsql_crypto;

Artık package hazır olduğuna göre istediğimiz metni ya da sayısal ifadeyi şifreleyip, çözebiliriz.
Örnek olarak aşağıdaki şekilde bir kullanım yapabiliriz.

DECLARE
  str           VARCHAR2(4000);
  sifreli_metin VARCHAR2(4000);
  cozulen_metin VARCHAR2(4000);
  anahtar       VARCHAR2(100);
BEGIN
  dbms_output.put_line('');
  dbms_output.put_line('---------------------Sayısal olmayan verilen şifrelenmesi ve çözülmesi---------------------' || chr(13));
  str           := 'A Place In The World Of Software , pl/sql ile crypto işlemi yapmak';
  anahtar       := 'crypto';
  sifreli_metin := smt.plsql_crypto.sifrele(str, anahtar);
  dbms_output.put_line('Şifrelenecek Metin:=' || str);
  dbms_output.put_line('Şifrelenmiş Hali:=' || sifreli_metin);
  dbms_output.put_line(chr(13) || '<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>' || chr(13));
  cozulen_metin := smt.plsql_crypto.coz(sifreli_metin, anahtar);
  dbms_output.put_line('Çözülecek Metin:=' || sifreli_metin);
  dbms_output.put_line('Çözülmüş Metin:=' || cozulen_metin);

  dbms_output.put_line('');
  dbms_output.put_line('---------------------Sayılar verilen şifrelenmesi ve çözülmesi---------------------' || chr(13));
  str           := '1234567890';
  anahtar       := 'crypto';
  sifreli_metin := smt.plsql_crypto.sifrele(str, anahtar);
  dbms_output.put_line('Şifrelenecek Sayısal Değer:=' || str);
  dbms_output.put_line('Şifrelenmiş Hali:=' || sifreli_metin);
  dbms_output.put_line(chr(13) || '<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>' || chr(13));
  cozulen_metin := smt.plsql_crypto.coz(sifreli_metin, anahtar);
  dbms_output.put_line('Çözülecek Sayısal Değer:=' || sifreli_metin);
  dbms_output.put_line('Çözülmüş Metin:=' || cozulen_metin);
END;

Burada sabit olarak verilen metin ve anahtar ile şifreleme ve çözme işlemi yapılıyor ve işlem sonucu aşağıdaki gibi olmaktadır.


---------------------Sayısal olmayan verilen şifrelenmesi ve çözülmesi---------------------

Şifrelenecek Metin:=A Place In The World Of Software , pl/sql ile crypto işlemi yapmak
Şifrelenmiş Hali:=;_Jf[]__Ch_Nb__Qilf^_I`_Mi`nq[l__&_jf)mkf_cf__]lsjni_cřf_gc_s[jg[e

<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>

Çözülecek Metin:=;_Jf[]__Ch_Nb__Qilf^_I`_Mi`nq[l__&_jf)mkf_cf__]lsjni_cřf_gc_s[jg[e
Çözülmüş Metin:=A Place In The World Of Software , pl/sql ile crypto işlemi yapmak

---------------------Sayılar verilen şifrelenmesi ve çözülmesi---------------------

Şifrelenecek Sayısal Değer:=1234567890
Şifrelenmiş Hali:=+,-./0123*

<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>

Çözülecek Sayısal Değer:=+,-./0123*
Çözülmüş Metin:=1234567890

Görüldüğü gibi sistemde var olan bir crypto işlemi gibi bizde kendi hazırladığımız kodlar ile crypto işlemini gerçekleştirmiş olduk.
Kolay gelsin.

Takip Et

Get every new post delivered to your Inbox.

Join 62 other followers