Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Stored Procedure Syntaxı
#1
Arkadaşlar merhaba;
Firebirdde kullandığım bir stored procedure örneğini MySQL e taşımaya çalışıyorum.Ancak çalıştırmayı başaramadım.
Syntax hatası nedir yardımcı olabilirmisiniz?
Teşekkürler...

Orijinal Olanı(Firebird):

create or alter procedure BHBAKIYELER (
   HANGIBANKA varchar(20))
returns (
   KAYITID numeric(18,0),
   CIKAN numeric(16,2),
   GIREN numeric(16,2),
   HESAPTANIMI varchar(20),
   ISLEMTARIHI date,
   BAKIYE numeric(16,2))
as
declare variable DYN_BAKIYE numeric(18,2);
BEGIN
 DYN_BAKIYE = 0.00;
 FOR
  SELECT  KAYITID,CIKAN,GIREN,HESAPTANIMI,ISLEMTARIHI
  FROM BANKAHAREKETLERI where BANKAHAREKETLERI.HESAPTANIMI=:HANGIBANKA  AND BANKAHAREKETLERI.SIL=0 order by ISLEMTARIHI,ISLEMSAATI,KAYITID
  INTO  :KAYITID,:CIKAN,:GIREN,:HESAPTANIMI,ISLEMTARIHI DO
   BEGIN
     DYN_BAKIYE = DYN_BAKIYE + (GIREN-CIKAN);
     BAKIYE = DYN_BAKIYE;
   SUSPEND;
   END

END



MySQL:
DELIMITER //
CREATE PROCEDURE BHBAKIYELER(
     IN HANGIBANKA VARCHAR(50),
  OUT `KAYITID` BIGINT,
     OUT `GIREN` DOUBLE,
     OUT `CIKAN` DOUBLE,
     OUT `HESAPTANIMI` VARCHAR(50),
     OUT `ISLEMTARIHI` DATE,
     OUT `BAKIYE` DOUBLE)
BEGIN
    DECLARE DYN_BAKIYE DOUBLE DEFAULT 0.00;
   simple_loop: LOOP
    SELECT BANKAHAREKETLERI.KAYITID,CIKAN,GIREN,HESAPTANIMI,ISLEMTARIHI
  FROM BANKAHAREKETLERI where BANKAHAREKETLERI.HESAPTANIMI = HANGIBANKA  AND BANKAHAREKETLERI.SIL = 0 order by ISLEMTARIHI,ISLEMSAATI,KAYITID
     DYN_BAKIYE = DYN_BAKIYE + (GIREN-CIKAN);
     BAKIYE = DYN_BAKIYE;
   END LOOP;
END //
DELIMITER ;
Cevapla
#2
Çözüldü:

MySQl de for kullanımı loop syntaxı ile oluyormuş.Birde değişkenleri set ederken SET anahtar kelimesi kullanılıyor.

Örnek çevrilmiş kod:

DROP PROCEDURE IF EXISTS `BHBAKIYELER`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `BHBAKIYELER`(HANGIBANKA VarChar(50), OUT KAYITID BigInt, OUT CIKAN Double, OUT GIREN Double, OUT HESAPTANIMI VarChar(50), OUT ISLEMTARIHI Date, OUT BAKIYE Double)
 
BEGIN     
  DECLARE DYN_BAKIYE DOUBLE DEFAULT 0.00;
   simple_loop: LOOP
    SELECT 
      KAYITID,
      CIKAN,
      GIREN,
      HESAPTANIMI,
      ISLEMTARIHI 
   FROM 
      BANKAHAREKETLERI where HESAPTANIMI = HANGIBANKA  
      AND I.SIL = 0 order by ISLEMTARIHI,ISLEMSAATI,KAYITID;
   SET DYN_BAKIYE = DYN_BAKIYE + (GIREN - CIKAN);
   SET BAKIYE = DYN_BAKIYE;
   END LOOP simple_loop;
END
;;
DELIMITER ;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Exclamation MySQL 8 - Incorrect number of arguments for PROCEDURE hi_selamlar 8 2.124 08-01-2019, Saat: 00:05
Son Yorum: hi_selamlar
  Stored Procedure LIMIT Sorunu yhackup 8 3.160 05-08-2018, Saat: 14:11
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi