Stored Procedure

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ı
şimal
Kıdemli Üye
Mesajlar: 516
Kayıt: 10 Kas 2003 09:36
Konum: ANKARA

Stored Procedure

Mesaj gönderen şimal »

Merhabalar...
3 parametresi: SATIS URUNTIP ID
2 degiskeni : DLR_TL DLR_PN olan bir stored proc um var.

DLR_PN DLR_TL ye URUN tablosundan veri alacagim. Bunlara gore HEDIYE_CARI tablosunda K_PUAN alanini update edecegim.

Bunun icin parametre olarak gelmis SATIS degerini uzerinde
SATIS/DLR_TL*DLR_PN aritmetiksel islemi yapmam gerek. Bunun sonucunda puna hesaplayip HEDIYE_CARI de K_PUAN degerini artirmam gerek... (Umarim derdimi anlatabilmisimdir :roll: )
Bunun icin bir stored procedure yazdim. Ama su satirda hata veriyor :?
UPDATE HEDIYE_CARI SET K_PUAN=K_PUAN+: SATIS/DLR_TL*DLR_PN

+ : den sonra sadece parametre verirsen sorun yok ancak orada işlem yaptırıyorum ya DLR_TL unknown column diyor... Ne yapmam gerek?
Procedurun tamami asagidadir....


COMMIT WORK;
SET TERM ^ ;
CREATE PROCEDURE SPI_PN_ARTIR (SATIS DOUBLE PRECISION, URUNTIP VARCHAR(20), ID VARCHAR(20)) AS DECLARE VARIABLE DLR_TL DOUBLE PRECISION;
DECLARE VARIABLE DLR_PN DOUBLE PRECISION;
begin
select YED1 from URUN where URUN_ADI=:URUNTIP INTO DLR_TL ;
select YED2 from URUN where URUN_ADI=:URUNTIP INTO DLR_PN ;
UPDATE HEDIYE_CARI SET K_PUAN=K_PUAN+: SATIS/DLR_TL*DLR_PN where KART_NO=:ID;

END
^

SET TERM ; ^
COMMIT WORK;
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

merhabalar,
Birde aşağıdaki gibi deneyin

Kod: Tümünü seç

select YED1 from URUN where URUN_ADI=:URUNTIP INTO :DLR_TL ; 
select YED2 from URUN where URUN_ADI=:URUNTIP INTO :DLR_PN ; 
saygılar
Kullanıcı avatarı
şimal
Kıdemli Üye
Mesajlar: 516
Kayıt: 10 Kas 2003 09:36
Konum: ANKARA

Mesaj gönderen şimal »

: (iki nokta üst üste) parametre almak için kullanılmaz mı? DLR_TL DLR_PN değişkenlerim. parametre değil ki...
Hem sorun o satırlarda değil anladığım kadarıyla...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

Merhaba..
önce yebi bir değişken tanımlayalım

Kod: Tümünü seç

DECLARE VARIABLE Y_PUAN DOUBLE PRECISION;
sonra bu değişkene değerini aktaralım

Kod: Tümünü seç

Y_PUAN=DLR_TL*DLR_PN 
Y_PUAN=SATIS/Y_PUAN
daha sonrada update islemini yapabiliriz.

Kod: Tümünü seç

UPDATE HEDIYE_CARI SET K_PUAN=K_PUAN+Y_PUAN 
Belki kodlar tam olarak çalışmaz ama en azından umarımki sana bir fikir verebilmişimdir.
Çalışmalarında başarılar..
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
şimal
Kıdemli Üye
Mesajlar: 516
Kayıt: 10 Kas 2003 09:36
Konum: ANKARA

Mesaj gönderen şimal »

ewt dediginiz gibi yaptim.. bi üçüncü değişken tanımladim. ara işlemleri üzerinde yaptırdım...
Sonra kolonda artacak değeri bununla artirdim... Aşağıdaki gibi
Çok Teşekkürler


COMMIT WORK;
SET TERM ^ ;
CREATE PROCEDURE SPI_PN_ARTIR (SATIS DOUBLE PRECISION, URUNTIP VARCHAR(20), ID VARCHAR(20)) AS DECLARE VARIABLE DLR_TL DOUBLE PRECISION;
DECLARE VARIABLE DLR_PN DOUBLE PRECISION;
DECLARE VARIABLE DLR_SONUC DOUBLE PRECISION;
begin
select YED1 from URUN where URUN_ADI=:URUNTIP INTO DLR_TL ;
select YED2 from URUN where URUN_ADI=:URUNTIP INTO DLR_PN ;
DLR_SONUC=DLR_TL/DLR_PN;
DLR_SONUC=SATIS/DLR_SONUC;
UPDATE HEDIYE_CARI SET K_PUAN=K_PUAN+: DLR_SONUC where KART_NO=:ID;

END
^

SET TERM ; ^
COMMIT WORK;
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Kod: Tümünü seç

UPDATE HEDIYE_CARI SET K_PUAN=K_PUAN+: SATIS/DLR_TL*DLR_PN where KART_NO=:ID; 
muhtemelen parantez kullanmadıgınızdan

Kod: Tümünü seç

UPDATE HEDIYE_CARI SET K_PUAN=(K_PUAN+: SATIS/DLR_TL*DLR_PN) where KART_NO=:ID; 
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

gerci zaten yapmissiniz ama...

Kod: Tümünü seç

UPDATE HEDIYE_CARI 
SET K_PUAN=K_PUAN+:SATIS/(select U.YED1/U.YED2 from URUN U where U.URUN_ADI=:URUNTIP) 
where KART_NO=:ID; 
seklinde de olmasi gerektigini dusunuyorum. (Su an deneme sansim yok... :) )
Cevapla