函数 SQL 错误代码:1046
Function SQL Error Code : 1046
这是我的函数查询:
DELIMITER $$
DROP FUNCTION IF EXISTS `dtkp`.`Tepat`$$
CREATE FUNCTION `dtkp`.`Tepat`(proses INT) RETURNS INT
BEGIN
DECLARE uid INTEGER;
DECLARE total_hari_kerja INTEGER;
DECLARE done INT DEFAULT FALSE;
SELECT total_hari_kerja = SUM (alokasi) FROM proses;
DECLARE krk_uid CURSOR FOR
SELECT DISTINCT krk FROM krk_kartu_kendali WHERE proses <= 8 ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TEMPORARY TABLE tempKK
(krk INT, terlambat INT) ENGINE=INNODB;
OPEN krk_uid;
tepatLoop:LOOP
FETCH krk_uid INTO uid;
IF done THEN
LEAVE tepatLoop;
END IF;
INSERT INTO tempKK
SELECT krk, GetTepat(realisasi_tgl_terima, total_hari_kerja) terlambat
FROM krk_kartu_kendali
WHERE proses=1
and krk=uid
ORDER BY RecID
LIMIT 1;
FETCH krk_uid INTO uid;
END LOOP;
CLOSE krk_uid;
DEALLOCATE krk_uid;
RETURN ;
END$$
DELIMITER ;
Error code : 1046
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 '' at line 8
错误本身说错误在第 no:8 行
您的第 8 行正在为 table 中的变量赋值。语法是
错
您还声明了一个游标并在 select 语句之后创建了一个临时 table。这不是正确的顺序..您应该将 declare 语句移到上面..即在开始任何其他语句之前..
你的函数也应该 return 一个 INT
值,但你只指定了 Return;
..你应该指定值连同 Return..我猜它可以成为 total_hari_kerja
试试下面
DELIMITER $$
DROP FUNCTION IF EXISTS `dtkp`.`Tepat`$$
CREATE FUNCTION `dtkp`.`Tepat`(proses INT) RETURNS INT
BEGIN
DECLARE uid INTEGER;
DECLARE total_hari_kerja INTEGER;
DECLARE done INT DEFAULT FALSE;
DECLARE krk_uid CURSOR FOR SELECT DISTINCT krk FROM krk_kartu_kendali WHERE
proses <= 8 ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TEMPORARY TABLE tempKK (krk INT, terlambat INT) ENGINE=INNODB;
BEGIN
SELECT SUM (alokasi) into total_hari_kerja FROM proses;
OPEN krk_uid;
tepatLoop:LOOP
FETCH krk_uid INTO uid;
IF done THEN
LEAVE tepatLoop;
END IF;
INSERT INTO tempKK SELECT krk, GetTepat(realisasi_tgl_terima, total_hari_kerja) terlambat FROM krk_kartu_kendali WHERE proses=1 and krk=uid ORDER BY RecID LIMIT 1;
FETCH krk_uid INTO uid;
END LOOP;
CLOSE krk_uid;
DEALLOCATE krk_uid;
RETURN total_hari_kerja ;
END$$
END$$
DELIMITER ;
这是我的函数查询:
DELIMITER $$
DROP FUNCTION IF EXISTS `dtkp`.`Tepat`$$
CREATE FUNCTION `dtkp`.`Tepat`(proses INT) RETURNS INT
BEGIN
DECLARE uid INTEGER;
DECLARE total_hari_kerja INTEGER;
DECLARE done INT DEFAULT FALSE;
SELECT total_hari_kerja = SUM (alokasi) FROM proses;
DECLARE krk_uid CURSOR FOR
SELECT DISTINCT krk FROM krk_kartu_kendali WHERE proses <= 8 ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TEMPORARY TABLE tempKK
(krk INT, terlambat INT) ENGINE=INNODB;
OPEN krk_uid;
tepatLoop:LOOP
FETCH krk_uid INTO uid;
IF done THEN
LEAVE tepatLoop;
END IF;
INSERT INTO tempKK
SELECT krk, GetTepat(realisasi_tgl_terima, total_hari_kerja) terlambat
FROM krk_kartu_kendali
WHERE proses=1
and krk=uid
ORDER BY RecID
LIMIT 1;
FETCH krk_uid INTO uid;
END LOOP;
CLOSE krk_uid;
DEALLOCATE krk_uid;
RETURN ;
END$$
DELIMITER ;
Error code : 1046
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 '' at line 8
错误本身说错误在第 no:8 行 您的第 8 行正在为 table 中的变量赋值。语法是 错
您还声明了一个游标并在 select 语句之后创建了一个临时 table。这不是正确的顺序..您应该将 declare 语句移到上面..即在开始任何其他语句之前..
你的函数也应该 return 一个 INT
值,但你只指定了 Return;
..你应该指定值连同 Return..我猜它可以成为 total_hari_kerja
试试下面
DELIMITER $$
DROP FUNCTION IF EXISTS `dtkp`.`Tepat`$$
CREATE FUNCTION `dtkp`.`Tepat`(proses INT) RETURNS INT
BEGIN
DECLARE uid INTEGER;
DECLARE total_hari_kerja INTEGER;
DECLARE done INT DEFAULT FALSE;
DECLARE krk_uid CURSOR FOR SELECT DISTINCT krk FROM krk_kartu_kendali WHERE
proses <= 8 ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TEMPORARY TABLE tempKK (krk INT, terlambat INT) ENGINE=INNODB;
BEGIN
SELECT SUM (alokasi) into total_hari_kerja FROM proses;
OPEN krk_uid;
tepatLoop:LOOP
FETCH krk_uid INTO uid;
IF done THEN
LEAVE tepatLoop;
END IF;
INSERT INTO tempKK SELECT krk, GetTepat(realisasi_tgl_terima, total_hari_kerja) terlambat FROM krk_kartu_kendali WHERE proses=1 and krk=uid ORDER BY RecID LIMIT 1;
FETCH krk_uid INTO uid;
END LOOP;
CLOSE krk_uid;
DEALLOCATE krk_uid;
RETURN total_hari_kerja ;
END$$
END$$
DELIMITER ;