无法创建过程Mysql

时间:2013-11-19 10:43:13

标签: mysql stored-procedures

我已经混淆了,所以我在这里问一下如何使用以下代码在mysql中创建存储过程:

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 ;

我得到的错误是:

#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

好吧,当我删除这些行时:

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;

成功执行。那么,是什么导致错误发生?有人可以给我一些线索吗?

1 个答案:

答案 0 :(得分:1)

您的ELSE IF错误,应该ELSEIF在一起

试试这个

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;
相关问题