mysql 在phpMyAdmin中创建存储过程时出现“Error #1313 RETURN is only allowed in a FUNCTION”错误

yshpjwxd  于 2024-01-05  发布在  Mysql
关注(0)|答案(2)|浏览(221)

我试图在phpMyAdmin中创建以下存储过程。但是,我一直得到这个错误:#1313 - RETURN is only allowed in a FUNCTION

  1. CREATE PROCEDURE IS_POINT_IN_POLYGON()
  2. BEGIN
  3. DECLARE n INT DEFAULT 0;
  4. DECLARE pX DECIMAL(19,16);
  5. DECLARE pY DECIMAL(19,16);
  6. DECLARE ls LINESTRING;
  7. DECLARE poly1 POINT;
  8. DECLARE poly1X DECIMAL(19,16);
  9. DECLARE poly1Y DECIMAL(19,16);
  10. DECLARE poly2 POINT;
  11. DECLARE poly2X DECIMAL(19,16);
  12. DECLARE poly2Y DECIMAL(19,16);
  13. DECLARE i INT DEFAULT 0;
  14. DECLARE result INT(1) DEFAULT 0;
  15. SET pX = X(p);
  16. SET pY = Y(p);
  17. SET ls = ExteriorRing(poly);
  18. SET poly2 = EndPoint(ls);
  19. SET poly2X = X(poly2);
  20. SET poly2Y = Y(poly2);
  21. SET n = NumPoints(ls);
  22. WHILE i<n DO
  23. SET poly1 = PointN(ls, (i+1));
  24. SET poly1X = X(poly1);
  25. SET poly1Y = Y(poly1);
  26. IF ( ( ( ( poly1X <= pX )
  27. && ( pX < poly2X ) ) || ( ( poly2X <= pX )
  28. && ( pX < poly1X ) ) )
  29. && ( pY > ( poly2Y - poly1Y ) * ( pX - poly1X ) / ( poly2X - poly1X ) + poly1Y ) ) THEN
  30. SET result = !result;
  31. END IF;
  32. SET poly2X = poly1X;
  33. SET poly2Y = poly1Y;
  34. SET i = i + 1;
  35. END WHILE;
  36. RETURN result;
  37. END//

字符串
如何解决这个问题呢?在SQL窗格中,我记得将SQL更改为//。
有什么建议吗?

yvt65v4c

yvt65v4c1#

错误消息告诉你问题所在--你不能在PROCEDURE中使用RETURN。创建一个FUNCTIONCREATE FUNCTION),它可以返回一个值。

  1. CREATE FUNCTION <FunctionName> RETURNS <DataType>

字符串

qqrboqgw

qqrboqgw2#

下面是同样的错误:
错误1313(42000):仅在FUNCTION中允许返回
当我用RETURN语句创建过程时,如下所示:

  1. DELIMITER $$
  2. CREATE PROCEDURE my_proc(INOUT value INT)
  3. BEGIN
  4. RETURN 2 + value;
  5. END$$
  6. DELIMITER ;

字符串
因此,我将RETURN语句替换为SELECT statement,如下所示,然后我可以创建过程而不会出错:

  1. DELIMITER $$
  2. CREATE PROCEDURE my_proc(INOUT value INT)
  3. BEGIN
  4. -- RETURN 2 + value;
  5. SELECT 2 + value INTO value;
  6. END$$
  7. DELIMITER ;

展开查看全部

相关问题