【问题标题】:Function SQL Error Code : 1046函数 SQL 错误代码:1046
【发布时间】:2015-08-17 01:37:39
【问题描述】:

这是我的函数查询:

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 ;

错误代码:1046

您的 sql 语法有错误:请查看与您的 Mysql 服务器版本相对应的手册,以在第 8 行的 '' 附近使用正确的语法

【问题讨论】:

  • 你的选择语句错误应该是SELECT SUM (alokasi) into total_hari_kerja FROM proses;
  • @Sachu 第 8 行是“ DECLARE krk_uid CURSOR FOR SELECT DISTINCT krk FROM krk_kartu_kendali WHERE proses
  • 你尝试改变 select 语句了吗?
  • @Sachu 完成了!!但“DECLARE krk_uid CURSOR FOR SELECT DISTINCT krk FROM krk_kartu_kendali WHERE proses
  • 错误在说什么?

标签: mysql sql function error-code


【解决方案1】:

错误本身说错误在第 8 行 您的第 8 行正在为表中的变量赋值。语法是 错了

您还要在 select 语句之后声明一个游标并创建一个临时表。这不是正确的顺序..您应该移动上面的声明语句..即在开始任何其他语句之前..

您的函数还应该返回一个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 ;

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 2014-07-26
    • 2012-11-30
    • 1970-01-01
    • 2012-07-11
    • 2017-12-27
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多