回答

收藏

MySQL语法错误创建存储过程

技术问答 技术问答 76 人阅读 | 0 人回复 | 2023-09-13

这让我疯了。
, @2 \! C  y9 w" U    CREATE DEFINER=`root`@`localhost` PROCEDURE `CalcularCRTarea` (Id_Tarea INT,OUT crTarea decimal(12、4)    DETERMINISTICBEGIN  DECLARE done BOOLEAN DEFAULT FALSE;  DECLARE _id BIGINT UNSIGNED;  DECLARE cur CURSOR FOR SELECT Id FROM Tarea_Frente where Id_Item_Tarea = Id_Tarea;  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;  OPEN cur;  testLoop: LOOP    FETCH cur INTO _id;    IF done THEN      LEAVE testLoop;    ELSE         CALL CalcularCRFrente(_id,@suma);        SET crTarea = crTarea   @suma;    END IF;  END LOOP testLoop;  CLOSE cur;      END;phpmyadmin 还给我* L4 {4 T8 `# j& C/ F6 o! M# g
MySQL said: Documentation#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 '' at line 4那将是线
6 r9 ]1 x+ q* H: x4 e% r- E- n: S        DECLARE done BOOLEAN DEFAULT FALSE;怎么了- j' k+ p- \6 ~+ ^( g* h
我尝试了一些小的变化,但我总是收到同样的错误。我检查了文档,但看不到语法错误。我知道这是一个愚蠢的错误,但我坚持了大约半个小时。这是一个游标,它迭代每一行,并执行每一行的存储过程;我用存储函数完成了它(它的工作原理很迷人),但当它发布在服务器上时,我看到我的共享主机不支持存储函数,只支持存储过程:(因此,这是我发现的最好的方法。$ z9 P" U4 @4 N2 p' \$ S
                                                                + Y0 f4 c0 M6 `5 p0 G
    解决方案:                                                                # ]9 V/ l; p4 |$ k; X. Y' j% E0 o9 T
                                                                你缺乏自定义delimiter指令。4 [4 O, g; q& O9 G: u, W9 H: c
当引擎找到第一个默认语句终止符分号时,你非常想念它,它试图编译这些语句。。所以这是个例外。* {7 H9 P  J  o  V" `3 V, c
把你的整个例程放在以下两者之间:7 L$ ?; F! W4 A8 H7 Q2 S2 n
-- define the delimiterdelimiter //--- place here your stored procedure-- and lastly following line//-- reset the delimiterdelimiter ; ;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则