Firebird'de sp ile kayıt problemi

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
zyildiz
Üye
Mesajlar: 115
Kayıt: 09 Mar 2004 01:22
Konum: Adapazarı

Firebird'de sp ile kayıt problemi

Mesaj gönderen zyildiz »

Selamunaleykum Dostlar

Firebird 1.5 kullnıyorum.

Kayıt amaclı olarak ilk defa sp yazmaya calısıyorum. Forumda arama yaptım, bazı sp leride inceledim. Ancak şu for ... do meselesinin mantıgını anlyamadım. Hatamda bundan dolayı diye dusunuyorum. Sp de for ...do mantığı hakkında bilgi ve yaptıgım hatayı duzeltmekte yardımcı olursanız sevinirim.

Demırbaslarla ılgılı iki tablom var. Hareketlerle ilgili tablodakı degerlerden en son islem tarihli verileri bir oranla carparak elde ettiğim yeni sonucları yine aynı tabloya insert etmek istiyorum.

Kod: Tümünü seç

ALTER PROCEDURE DENE5 (
    TRH DATE,
    Y_D_ORANI FLOAT)
AS
DECLARE VARIABLE DNO INTEGER;
DECLARE VARIABLE SNO INTEGER;
DECLARE VARIABLE A DOUBLE PRECISION;
DECLARE VARIABLE B DOUBLE PRECISION;
begin
  INSERT INTO hareket2 (DEMIRBASNO, SIRANO)


SELECT DEMIRBASNO, SIRANO FROM demirbaskarti;



select max(islemtarihi)as tarih, demirbasno, sirano from hareket2
group by demirbasno, sirano
INTO :trh, :dno, :sno;


select sondeger from hareket2
where islemtarihi=:trh and demirbasno=:dno and sirano=:sno
into:A;

B=:A*Y_D_ORANI;

UPDATE hareket2
set
ONCEKI_DEGER=:A,
ISLEMTARIHI=:TRH,
SONDEGER=:B,
YDORANI=:Y_D_ORANI
WHERE DEMIRBASNO=:DNO AND SIRANO=:SNO;

end
sp yi execute ettigimde bu hatayı veriyor.

Kod: Tümünü seç

multiple rows in singleton select
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
anladığım kadarıyla select işlemlerinden biri birden fazla kayıt döndürüyor. Eğer select işlemlerinde birden fazla kayıt dönemsi normalse for - do yapısını öğrenip kullanman gerekecek. kodları detaylı inceliyemiyorum kusura bakma. iyi geceler.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
zyildiz
Üye
Mesajlar: 115
Kayıt: 09 Mar 2004 01:22
Konum: Adapazarı

Mesaj gönderen zyildiz »

Zamanınızı ayırdıgınız için teşekkur ederim.

Aslenageri'ninde dedigi gibi select ifadelerinden dönen degerlerin ne oldugunu görerek çözüme ulaşmaya çalışınca hatalı oldugum noktalar adım adım ortaya çıktı.

spnin çalışan hali

Kod: Tümünü seç

ALTER PROCEDURE DENE6 (
    Y_D_ORANI FLOAT,
    TRH DATE)
AS
DECLARE VARIABLE A DOUBLE PRECISION;
DECLARE VARIABLE SIRANO INTEGER;
DECLARE VARIABLE DEMIRBASNO INTEGER;
DECLARE VARIABLE B DOUBLE PRECISION;
begin
  FOR
    SELECT HAREKET2.SONDEGER, HAREKET2.SIRANO, HAREKET2.DEMIRBASNO
        FROM HAREKET2
           INNER JOIN V_DENE ON (HAREKET2.DEMIRBASNO = V_DENE.DEMIRBASNO) AND (HAREKET2.SIRANO = V_DENE.SIRANO)
           AND (HAREKET2.ISLEMTARIHI = V_DENE.ISLEMTARIHI)
    INTO :A,
         :SIRANO,
         :DEMIRBASNO
DO


  BEGIN
 B=A*:y_d_orani ;

 insert into hareket2(DEMIRBASNO, SIRANO, SONDEGER, ONCEKI_DEGER, ISLEMTARIHI,YDORANI) values
 (:DEMIRBASNO, :SIRANO, :B, :A,:TRH,:Y_D_ORANI );
 END
end

Cevapla