SP içerisinden başka bir SP yi çalıştırıp sonucunu kullanma

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
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 arkadaşlar,
Bir STORED PROCEDURE içerisinden başka bir SP yi çalıştıp onun döndürdüğü değeri kullanmak ile iligi bir sorum olacak mesela,
Bir procedure var örnek olsun die basit bir şey,

Kod: Tümünü seç

CREATE PROCEDURE PROC_URUNHARINC 
RETURNS (
    NUM INTEGER)
AS
BEGIN
NUM = GEN_ID(urun_har_gen,1);
END
bir procedure daha var bu tabloya kayıt ekliyor mesela,

Kod: Tümünü seç

CREATE PROCEDURE SPD_URUN_EKLE (
    URUN_NO INTEGER,
    URUN_ADI VARCHAR (30))
AS
declare variable ID_SAYI integer;
BEGIN
  ID_SAYI = execute procedure proc_urunharinc;
  INSERT INTO URUN (Id,URUN_NO,URUN_ADI) VALUES (:ID_sayi,:URUN_NO,:URUN_ADI);
END
şeklinde bir kullanımla bir önceki , PROC_URUNHARINC in döndürdüğü değer bu procedure içinde kullanamaya çalıştım ama tabi SP derlenemedi bile nasıl bir kullanm yapmalaıyım teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

select donus_deg from proc_urunharinc into :lokal_deg;

seklinde bir tablo gibi kullanarak yapacaksın
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Sayın @gkimirti;
Örneğinizden olayı çözemedim
şimdi INSERT eden bir procedure var bu tablonun bir alanı AUTOINCREMENT bu değerini başka bir GENERATORU çalıştıran başka bir SP den alacak ben o GENERATOR çalıştırıcı procedurenin geri döndürdüğü INTEGER tipi değişkeni INSERT işlemi yapacağım SP de nasıl kullanacağım yani onu yerel bir değişkene nasıl atayabilirim.
Teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Gökmenin söylediği procedure bir tabloymuş gibi select ile ulaşıp içindeki tek değer zaten onu into ile local değişkenine taşımak.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
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 teşekkür ediyorum donus_deg nedir tam olarak ne yazacağım oraya yani bir GENERATOR SP si bu parametre almıyor benden.
Teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

donus_deg artırmayı yapan sp nin output degisken ismi
lokal_deg ise insert islemini yapacagın sp de bir yerel degisken.
bu ikisini kendi tablona vs. uyarladıgında select ifadesi lokal degiskene sp yi cagırıp donus degerini atayacak.
sende herhangi bir degisken gibi insert ifadesinde bu degiskeni kullanacaksın
hatta artırma icin ayrı bir procedure olusturmaya dahi gerek uok
asagıdaki ornegi incele:

Kod: Tümünü seç

CREATE TRIGGER USERLOG_TEKLIF FOR TEKLIF
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 999
as
declare variable TBL_ID integer;
declare variable USER_ID integer;
begin
  --Insert:1,Update:2,Delete:3
  select t.id from tablolar t where t.adi like 'TEKLIF' into :TBL_ID;
  select u.id from users u where (u.adi like user) into :USER_ID;

  if (:USER_ID is null) then
    exception ex_user;

  if (inserting) then
      insert into USER_LOG (ID,RECORD_ID,TABLE_ID,USER_ID,OP_ID,TARIH,SAAT)
             values(gen_id(GEN_USER_LOG,1),new.ID,:TBL_ID,:USER_ID,1, current_date ,current_time);
  if (updating) then
      insert into USER_LOG (ID,RECORD_ID,TABLE_ID,USER_ID,OP_ID,TARIH,SAAT)
             values(gen_id(GEN_USER_LOG,1),old.ID,:TBL_ID,:USER_ID,2, current_date ,current_time);
  if (deleting) then
      insert into USER_LOG (ID,RECORD_ID,TABLE_ID,USER_ID,OP_ID,TARIH,SAAT,REFERANS)
             values(gen_id(GEN_USER_LOG,1),old.ID,:TBL_ID,:USER_ID,3, current_date ,current_time,old.ref_no);
end
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Çok teşekkür ediyorum, vermiş olduğunuz bilgiler doğrultusunda olayı çözdüm.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla