1

我试图在这里解决另一个问题。一位成员告诉我,为了找到问题的答案,我需要更改查询以匹配 SP。为了做到这一点,我被告知要声明变量,所以我像在 SP 中一样使用变量。我的问题是我读了这么多,我的眼睛很痛,我不知道如何声明 friggin 变量。

请帮忙!!

这是我到目前为止所读到的:

资源 1资源 2资源 3资源4资源5

我可以继续下去。我真的被卡住了。我是 SQL 新手,这让我很烦。我不必使用 SP,但我真的很想这样做,这样我就可以了解注意事项,并希望学到足够的知识来帮助他人。

DECLARE zipcode VARCHAR(30)
DECLARE radius VARCHAR(30)
SET zipcode = 08360
SET radius = 50

SELECT C.CustomerName, C.MenuId
FROM Customers C
INNER JOIN (
  SELECT ZIPCODE, ( 3959 * ACOS( COS( RADIANS( (
    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
    ) ) ) * COS( RADIANS( LAT ) ) * COS( RADIANS( LNG ) - RADIANS( (

      SELECT Z.LNG
      FROM ZipCodes Z
      WHERE Z.ZIPCODE =zipcode
      LIMIT 0 , 1
    ) ) ) + SIN( RADIANS( (

    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
  ) ) ) * SIN( RADIANS( LAT ) ) ) ) AS distance
  FROM ZipCodes
  HAVING distance <radius
  ORDER BY distance
) AS RelevantCodes ON ( C.ZIPCODE = RelevantCodes.ZIPCODE )

我已经尝试了很多我在互联网上看到的组合,以至于我开始认为现在已经太晚了,不能再做任何事情了。如果您查看我查看的一些资源,您会看到我在哪里看到了带“@”和不带“@”之间的区别。

4

1 回答 1

1

如果要创建存储过程,则需要使用正确的语法。

请参阅:http
://dev.mysql.com/doc/refman/5.5/en/create-procedure.html 请注意,在 proc 主体内,您需要用;.

因为您需要让 MySQL 知道主体过程何时结束,并且您需要将分隔符重新声明为不是;. 这将阻止 MySQL 在第一个 ';' 之后解释您的存储过程,而是一直监听到$$.

完成输入函数后,不要忘记将分隔符恢复为默认值。

SET DELIMITER $$

CREATE PROCEDURE QueryCustomerMenu(IN zipcode VARCHAR(30), IN radius VARCHAR(30))
BEGIN

DECLARE somevar VARCHAR(20);
SET somevar = '456';

SELECT C.CustomerName, C.MenuId
FROM Customers C
INNER JOIN (
  SELECT ZIPCODE, ( 3959 * ACOS( COS( RADIANS( (
    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
    ) ) ) * COS( RADIANS( LAT ) ) * COS( RADIANS( LNG ) - RADIANS( (

      SELECT Z.LNG
      FROM ZipCodes Z
      WHERE Z.ZIPCODE =zipcode
      LIMIT 0 , 1
    ) ) ) + SIN( RADIANS( (

    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
  ) ) ) * SIN( RADIANS( LAT ) ) ) ) AS distance
  FROM ZipCodes
  HAVING distance <radius
  ORDER BY distance
) AS RelevantCodes ON ( C.ZIPCODE = RelevantCodes.ZIPCODE );

END $$

SET DELIMITER ;

现在您可以使用以下命令调用存储的过程:

CALL QueryCustomerMenu('09210','20');

它将返回一个带有CustomerNameand的结果集MenuID

于 2013-02-10T09:11:58.857 回答