Firebird Stored Procedure ve Trigger Bilgisi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

SET TRANSACTION, COMMIT ve ROLLBACK aynen çalışır.

Detay için Interbase'in LANGREF.PDF'e göz atın orada örnekleri ile var.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Teşekkür ediyorum, peki şunu sorayım mesela Bir birini çağıran SP lerde atıyorum 1.SP de aşlattığım TRANSACTION sonuncuda COMMIT edebilirim değilmi sorun olmaz yani.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

FB v1.5'de Transactionlara name verebiliyorsun ve istediğin anda istediğin transaction'ı commit edebiliyorsun veya rollback edebiliyorsun.

Kod: Tümünü seç

SET TRANSACTION AHMET
.
.
IVIR ZIVIR KODLAR
.
.
SET TRANSACTION ADNAN
.
.
IVIR ZIVIR KODLAR
.
.

COMMIT ADNAN
.
.
IVIR ZIVIR KODLAR
.
.
COMMIT AHMET
Şeklinde bloklar ve içi içe transaction'lar kurabilirsiniz ve her SP'ye kendi içinde transactionlar açıp rollback filan yapabilirsiniz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Evet gerçekten çok işime yaradı. ilginizden dolayı teşekkür ederim.
İyi çalışmalar
Volkan KAMADAN
www.polisoft.com.tr
ßozis
Üye
Mesajlar: 16
Kayıt: 28 Ağu 2004 11:07
Konum: adapazarı

Mesaj gönderen ßozis »

SelamunAleykum arkadaşlar;

ben @Kuri_TLJ hocamın yukarıda dediği gibi ufak bir sp yaptım ama
şu TRANSACTION olayını bir türlü sp içinde yaptıramadım... acaba bu TRANSACTION ları bir yerlerde tanımlıyormuyuz yok sa
SET TRANSACTION AHMET demek yeterli oluyormu..
my_sp DBWorkBench YAPIYORUM ;

Kod: Tümünü seç

Begin
    SET TRANSACTION T1  

     INSERT INTO PERSONEL(PSICIL,P_AD,PSOY,PISEGIR) VALUES(:PPS,:PPA,:PPSY,:PPI);

    COMMIT T1

End
eğer yanlış anlamadıysam ben bunu Sql Editorden

Kod: Tümünü seç

  EXECUTE PROCEDURE MY_SP ......( PARAMETRELER) ;
dediğimde commit etmeden kendisi sp içinde commit etmesi lazım..

teşekkürler..
ßurak
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

A.S.

Pardon sorun nerede ben anlayamadım? Dediklerin doğru ve görünen o ki, senin SP'deki transaction'nın da commit etmesi gerekir.

Ama DBWorkbench'de (SQL Editöründe) bir iş yaptığında en sonunda commit etmen gerekir. Zira işleme başlarken o da bir Transaction Başlatıyor, içi içe transaction'lar varken içerdeki transactionı commit etmen demek bilgilerin commit edildi anlamına gelmez :) (Burasını ayrıca reel olarak denemek lazım) En dıştaki transaction commit edildiğinde bilgi Tüm yapılan değişiklikler commit edilir.

İç transactionlar, genelde seri işlemler yapılırken ve eğer işlem sonucu yanlış oldu ama bir önceki noktaya yani, içerdeki işlemlerin bir kısmının yapılmış ama bazılarının yapılmamış olduğu ana dönmek için kullanılır.

En son olarakta ana Transaction'ı (En dıştakini) commit ederek, yapılanları DB'ye reel olarak aktarılmasını sağlayabilirsiniz.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
ßozis
Üye
Mesajlar: 16
Kayıt: 28 Ağu 2004 11:07
Konum: adapazarı

Mesaj gönderen ßozis »

hocam anladım ama ben

Kod: Tümünü seç

Begin
     SET TRANSACTION BRK
         INSERT INTO PERSONEL(PSICIL,P_AD,PSOY,PISEGIR) VALUES(:PPS,:PPA,:PPSY,:PPI);
     COMMIT BRK
End
bu yazdığım SP hata veriyor ...
Hata Mesajı: Unknown Command 'SET'
Unknown Command 'TRANSACTION'
Unknown Command 'BRK'
Unknown Command 'COMMIT'
Unknown Command ' BRK'

hocam örnekteki gibi bir sp oluşturamadım...

cevap için teşekkürler... iyi çalışmalar...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba,
SP nizin tamamı buysa gayet tabiki hatalı bir SP
bir SP CREATE PROCEDURE SP_ADI.... şeklinde başlar
Başarılar


Örnek;

Kod: Tümünü seç

CREATE PROCEDURE PROC_KIMLIKAUTOINC 
RETURNS (
    NUM INTEGER)
AS
BEGIN
NUM = GEN_ID(KIMLIK_GEN,1);
END
// makalelerden alıntıdır.
Volkan KAMADAN
www.polisoft.com.tr
ßozis
Üye
Mesajlar: 16
Kayıt: 28 Ağu 2004 11:07
Konum: adapazarı

Mesaj gönderen ßozis »

Hacam ben sadece DBWorbench teki SP editorunde geliştiriyorum onun için o benim için DDL ini kendi oluşturuyor yok sa benim DDL şöyle;

Kod: Tümünü seç

SET TERM ^^ ;
CREATE PROCEDURE SP_KAYIT (
  PPS Integer,
  PPA VarChar(20),
  PPSY VarChar(20),
  PPI Date)
AS
Begin
     SET TRANSACTION BRK
         INSERT INTO PERSONEL(PSICIL,P_AD,PSOY,PISEGIR) VALUES(:PPS,:PPA,:PPSY,:PPI);
     COMMIT BRK
End
^^
SET TERM ; ^^
ama ben hala şu
SET TRANSACTION BRK
ıvır zıvır
.......

COMMIT BRK
yapamadım

teşekkürler...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba
SET TRANSACTION BRK nin sonuna ; koyarak denermisin, birde tabi COMMKIt in sonunada alakalı olabilir.
Volkan KAMADAN
www.polisoft.com.tr
ßozis
Üye
Mesajlar: 16
Kayıt: 28 Ağu 2004 11:07
Konum: adapazarı

Mesaj gönderen ßozis »

hocam gene aynı hata

Kod: Tümünü seç

Begin
     SET TRANSACTION BRK;
         INSERT INTO PERSONEL(PSICIL,P_AD,PSOY,PISEGIR) VALUES(:PPS,:PPA,:PPSY,:PPI);
     COMMIT BRK;
End
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Database Version ve Adı nedir?
DBWorkbench'in Versionu Kaç?

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
ßozis
Üye
Mesajlar: 16
Kayıt: 28 Ağu 2004 11:07
Konum: adapazarı

Mesaj gönderen ßozis »

Ben SET Transaction ı ve COMMIT olayını hala daha yapamadım..

SP nin içinde ;

Kod: Tümünü seç

SET TERM ^^ ;
CREATE PROCEDURE SP_KAYIT (
  PPS Integer,
  PPA VarChar(20),
  PPSY VarChar(20),
  PPI Date)
AS
Begin

set transaction a;

INSERT INTO PERSONEL(PSICIL,P_AD,PSOY,PISEGIR) VALUES(:PPS,:PPA,:PPSY,:PPI);

commit a;

End
^^
SET TERM ; ^^
yukarıdaki gibi kullanıyorum ama hep set transaction tanımlama hatası veriyor acaba nasıl kulllanmam gerekiyor...
şimdiden teşekkürler;
ßozis
Üye
Mesajlar: 16
Kayıt: 28 Ağu 2004 11:07
Konum: adapazarı

Mesaj gönderen ßozis »

FireBird : Firebird-1.5.0.4306-Win32.exe
DBWorkBench : 2.4.2.13 (demo )
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Şu transaction meselesine bi açıklık getirelim isterseniz... Transaction genel manada Oturum anlamına gelir... Windows Oturumu gibi düşünün... Bir işlemler yumağıdır.. Transactionu başlattığınız anda kayıt, ekleme, silme, düzeltme, görüntüleme gibi tüm işlemleri yapabilir durumdasınız anlamına gelir. Yani bir veritabanı oturumudur transaction... Database e Open mesajı gittiği anda transaction otomatik başlatılmıştır zaten.. Bütün işlemlerinizi tek transaction içerisinde yapabileceğiniz gibi bi kaç transactionla birlikte de çalışabilirsiniz.. Şimdi gelelim SP ler içindeki transaction meselesine...Sp hangi Transaction içinde kullanılacaksa o Transactionu SET etmeniz gerekiyor... Ancak tek transaction kullanıyorsanız ki genel de böyle kullanılır Transaction zaten aktif haldedir tekrar set etmeniz gerekmiyor... Hiç bir transaction komutu göndermeden SP yi tetiklediğinizde zaten aktif olan transaction üzerinde Procedure nüz çalışacaktır... Bence farklı transactionları çok elzem olmadıkça farklı databaseler kullandığınız zamanlarda çalıştırın. Tek database üzerinde farklı transactionlar mantıklı değil...

Sevgiler...
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Cevapla