normalde çalışan ama triggerda çalışmayan s.p.

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
sagu666
Üye
Mesajlar: 4
Kayıt: 21 Kas 2014 12:47

normalde çalışan ama triggerda çalışmayan s.p.

Mesaj gönderen sagu666 »

Normalde select * from PRO_IDOLUSTUR('ABCDEF') komutu ile sonuç döndürüyor. Ama trigger içinde output parametresi yok uyarısı veriyor.Nedendir bilemedim.
Yardımlarınızı bekliyorum.

Kod: Tümünü seç

SET TERM ^ ;

CREATE OR ALTER PROCEDURE PRO_IDOLUSTUR (
    DEGER VARCHAR(41))
RETURNS (
    OUT_ID INTEGER)
AS
DECLARE VARIABLE OUT_IDVAR VARCHAR(25);
DECLARE VARIABLE TOPLAM INTEGER;
DECLARE VARIABLE ART INTEGER;
BEGIN
  ART = 0;
  TOPLAM = 0;
  WHILE (ART < CHARACTER_LENGTH(DEGER)) DO
  BEGIN
    TOPLAM = TOPLAM + ((ART + 10) * (ART * ASCII_VAL(SUBSTRING(DEGER FROM ART + 1 FOR ART + 2))));
    ART = ART + 1;
    OUT_IDVAR = CAST(CHARACTER_LENGTH(DEGER) AS VARCHAR(10)) || CAST(TOPLAM AS VARCHAR(10));
  END
  OUT_ID = CAST(OUT_IDVAR AS INTEGER);
  SUSPEND;
END^

SET TERM ; ^
sagu666
Üye
Mesajlar: 4
Kayıt: 21 Kas 2014 12:47

Re: normalde çalışan ama triggerda çalışmayan s.p.

Mesaj gönderen sagu666 »

stored procedure yi değiştirdim sonuç aynı. sp çalışıyor. tetikden çalışmıyor fikri olan?

Kod: Tümünü seç

SET TERM ^ ;

CREATE OR ALTER PROCEDURE PRO_HASTAX (
    TABLO_AD VARCHAR(40),
    TABLO_ALAN_SET VARCHAR(40),
    TABLO_ALAN_ORTAK VARCHAR(40),
    TABLO_ALAN_ORTAK2 VARCHAR(40),
    ID1 VARCHAR(40),
    ID2 VARCHAR(40))
AS
DECLARE VARIABLE DEGER VARCHAR(100);
DECLARE VARIABLE OUT_IDINT VARCHAR(100);
DECLARE VARIABLE SQL_KOMUT VARCHAR(300);
DECLARE VARIABLE OUT_IDVAR VARCHAR(25);
DECLARE VARIABLE TOPLAM INTEGER;
DECLARE VARIABLE ART INTEGER;
BEGIN
  ART = 0;
  TOPLAM = 0;
DEGER = :ID1 || '_' || :ID2;

  WHILE (ART < CHARACTER_LENGTH(DEGER)) DO
  BEGIN
    TOPLAM = TOPLAM + ((ART + 10) * (ART * ASCII_VAL(SUBSTRING(DEGER FROM ART + 1 FOR ART + 2))));
    ART = ART + 1;
    OUT_IDVAR = CAST(CHARACTER_LENGTH(DEGER) AS VARCHAR(10)) || CAST(TOPLAM AS VARCHAR(10));
  END
  OUT_IDINT = CAST(OUT_IDVAR AS INTEGER);

   SQL_KOMUT = 'UPDATE ' || TABLO_AD || ' SET ' || TABLO_ALAN_SET || ' = ' ||  :OUT_IDINT  ||
   ' WHERE ( ' || TABLO_ALAN_ORTAK  || '  =  ''' || :ID1 ||  ''')' ||
   '  AND ( '  || TABLO_ALAN_ORTAK2 || '  =  ''' || :ID2  ||  ''')' ;
 EXECUTE STATEMENT :SQL_KOMUT;
END^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE PRO_HASTAX TO SYSDBA;


trigger

Kod: Tümünü seç

SET SQL DIALECT 3;
SET TERM ^ ;

CREATE OR ALTER TRIGGER TRI_HASTALARGIRIS FOR HASTALAR
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN  
 new.hastax = new.hasta_ad || '_' || new.hasta_soyad;
 execute procedure pro_hastax('HASTALAR','HASTA_ID','HASTA_AD','HASTA_SOYAD',new.hasta_ad,new.hasta_soyad);

END^
SET TERM ; ^
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: normalde çalışan ama triggerda çalışmayan s.p.

Mesaj gönderen rsimsek »

SP de EXECUTE STATEMENT :SQL_KOMUT; altına SUSPEND ekleyip deneyin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
sagu666
Üye
Mesajlar: 4
Kayıt: 21 Kas 2014 12:47

Re: normalde çalışan ama triggerda çalışmayan s.p.

Mesaj gönderen sagu666 »

Sorun firebird3 64 bitteymiş. 32 bitte çalıştı :) Rus arkadaşlara ilettim büyük ihtimal beta 2 de çözeceklermiş.
Cevapla