这让我疯了。 , @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 ; ;