简体   繁体   中英

Can't Create Procedure Mysql

I've already confused so that, I am asking here, about how to create a stored procedure in mysql with below code :

DELIMITER $$
CREATE PROCEDURE hitung_nilai_stok(sisa INT)

BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE jumlah DECIMAL;
    DECLARE harga INT;
    DECLARE nilai_stok INT DEFAULT 0;
    DECLARE selisih DECIMAL DEFAULT 0.000;
    DECLARE data_stok CURSOR FOR SELECT
        Stok.masuk,
        Stok.harga_masuk

        FROM stoks Stok
        WHERE Stok.barang_id = 1
        AND Stok.tanggal <= '2013-11-19';

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    TRUNCATE TABLE transaksi;

    SET selisih = sisa;
    OPEN data_stok;

    loop_data: LOOP
        FETCH data_stok INTO jumlah, harga;
        SET selisih = selisih - jumlah;

        IF done THEN
            LEAVE loop_data;
        END IF;

        IF (selisih = 0.000) THEN
            INSERT INTO transaksi VALUES (jumlah,harga);
        ELSE IF (selisih > 0.000) THEN
            SET selisih = selisih;
            INSERT INTO transaksi VALUES (jumlah,harga);
        ELSE IF (selisih < 0.000) THEN
            INSERT INTO transaksi VALUES (selisih,harga);
            SET done = TRUE;
        END IF;
    END LOOP loop_data;

    CLOSE data_stok;

    SELECT SUM(jumlah*harga) FROM transaksi;

END$$

DELIMITER ;

The error I got is :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOOP loop_data; CLOSE data_stok; SELECT SUM(jumlah*harga) INTO nilai_stok FR' at line 49

Well, when I removed these lines :

ELSE IF (selisih > 0.000) THEN
    SET selisih = selisih;
    INSERT INTO transaksi VALUES (jumlah,harga);
ELSE IF (selisih < 0.000) THEN
    INSERT INTO transaksi VALUES (selisih,harga);
    SET done = TRUE;

It executed successfully. So, what is it that made the error occured? Can somebody gimme some clues?

Your ELSE IF is wrong, it should be ELSEIF together

Try this

IF (selisih = 0.000) THEN
            INSERT INTO transaksi VALUES (jumlah,harga);
        ELSEIF (selisih > 0.000) THEN
            SET selisih = selisih;
            INSERT INTO transaksi VALUES (jumlah,harga);
        ELSEIF (selisih < 0.000) THEN
            INSERT INTO transaksi VALUES (selisih,harga);
            SET done = TRUE;
 END IF;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM