我已经混淆了,所以我在这里问一下如何使用以下代码在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;
成功执行。那么,是什么导致错误发生?有人可以给我一些线索吗?
答案 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;