函数 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 ;