Stored Procedure Hakkında Başka Bir Yazı...
DotCom07.03.2004 - 19:34:59
Bulduğum Bir Makaleyi Sizlerle Paylaşmak İstedim.. ( Fahrettin abi Kusura bakma ayıp olmamıştır inşallah sana :-( )

Strored Procedure Nedir?, Ne amaçla kullanılır

Depolanmış Yordamlar(Stored Procedure) : Interbase veritabanı üzerine yazılan rutinlerdir. Kullandığınız dille veya SQL ile bir ilgisi olmayıp; İnterbase veritabanına özgü bir kod yapısıdır. Stored Procedur’ların kodu platformdan bağımsızdır. Eğer verilerinizi hem UNIX’te hem de Windows’ta kullanacaksanız veritabanı işlemlerinizin çoğunu Stored Procedur’lar aracılığla yapmanızı öneririm. Böylece Stored Procedure’ların gerekli işleri yapmasını sağlayan çok küçük istemci uygulamalar yaratabilirsiniz.

En önemlisi istemci/sunucu uygulamalarda Stored Procedure’lar sunucu(server) yakasında çalışacağından (yani veritabanı’nın olduğu yerde) ilgili işlemler çok hızlı gerçekleşecek ve network trafiğini rahtlatacaktır.
Evet Stored Procedure (Depolanmış yordamlar) genel anlamda anladığımıza göre şimdi basit bir Procedure yaratalım ama önce genel yapısını inceleyelim

CREATE PROCEDURE ProcedureName
<giren parametreler>
RETURNS
<dönen parametreler>
AS
<yerel değişkenlerin tanımı>
BEGIN
<yordam gövdesi>
END


SQL Explorer ‘i açıp Procedure’un üzerinde CTRL + N ‘e basalım
Aşağıda yazacağımız yordam bize veri kümesi değil sadece bir değer dönderecektir.

CREATE PROCEDURE SICIL_COUNT RETURNS (SICILCOUNT INTEGER
) AS
BEGIN
SELECT COUNT(*) FROM SICIL INTO :SICILCOUNT;
SUSPEND;
END


Bu yordam hiç parametre almaz fakat bir değer döndürür.
CTRL + A (Apply yapalım). Evet basit bir Depolanmış Yordam yazdık. Şimdi bunu çalıştıralım.

Şimdi ISQL’i açalım ve veritabanına bağlandıktan sonra;

select * from SICIL_COUNT (CTRL + ENTER’a basıp run edelim.


Şimdi bunu delphi ile bir TStoredProc bileşenini kullanarak bu yordamdan dönen veriyi alabiliriz. Burada hemen söylemeliyim ki ben bir Delphi programcısı değil C,C++ proramcısıyım ama bu basit kodu sanırım Delphi’de sizin için yazabilirim.

Şimdi Delphi’yi açalım ve bileşen paletinden TDatabase veya TIBDatabase’i alıp formumuzun üzerine sürükleyelim ve Databasename özelliğine uygun yolu yazdıktan sonra ör:”c:\data\dersane.gdb” gibi, daha sonra TStoreProc veya TIBStoredProc bileşenini formumuzun üzerine sürükleyelim DatabaseName özelliğine Database nesnesini atadıktan sonra StoredProcName özelliğine de yazmış olduğumuz yordamın ismini eşitleyelim (“SICIL_COUNT”)

Function TForm1.GetRecordCount: Integer;
Begin
StoredProc1.Prepare;
StoredProc1.ExecProc;
Result := StoredProc1.ParamByName(‘SICILCOUNT’).AsInteger;
End


Şimdi bir Exception yaratalım ve bu exception’ı çağıran bir procedure yazalım.

Exception bir hata durumunda ekranda göstereceğimiz mesajı tanımlar ve genel yapısı aşağıdaki gibidir.
CREATE EXCEPTION name 'mesajınız';
ISQL’i açalım ve veritabanına bağlandıktan sonra

CREATE EXCEPTION DETAILHATA "Master kayıt kayıp veya yok"; CTRL + ENTER

bu exception’u master tabloda olmayan bir öğrenci numarasını detail kayıt olan VELI tablosuna ekleyeceğimiz kayıtta çıkacak hatada çağıracağız. Bu hatanın çıkma sebebi önceki bölümlerde tanımladığımız Referans Integrity (Referans Bütünlüğü)’den kaynaklanmaktadır.

Şimdi Veli tablosuna kayıt ekleyecek Stored Procedure’ımızı yazalım. SQL Explorer’ı açalım, veritabanımıza bağlanalım ve procedure’ın üzerinde CTRL + N’e basalım

CREATE PROCEDURE ADD_VELI (
OGRNO DOUBLE PRECISION,
VADI VARCHAR(20),
VSOYADI VARCHAR(20)
) AS
BEGIN
BEGIN
INSERT INTO VELI (OGRNO,VADI,VSOYADI) VALUES (:OGRNO, :VADI, :VSOYADI);
WHEN SQLCODE -530 DO
EXCEPTION DETAILHATA;
END
SUSPEND;
END


Evet sanırım anlaşılıyor şimdi bu yordamı ISQL’den çalıştıralım; tabii isterseniz delphi veya başka bir programlama dilinden de çağırabilirsiniz.

execute procedure add_veli(11,"Cüneyt","ERDEM"); CTRL + ENTER

11 numaralı öğrenci master tabloda tanımlı olmadığı için tanımladığımız hata mesajı ekrana gelecektir. Fakat bu yordamı Ana tabloda var olan bir kayıt numarası ile çalıştırırsanız bu hata çıkmayacak istediğiniz veriler VELİ tablosuna yazılacaktır.

Kolay Gelsin
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com