我正在尝试解决另一个问题here。一位成员告诉我,为了找到问题的答案,我需要更改查询以匹配SP。为了做到这一点,我被告知要声明变量,所以我使用的变量就像我在SP中一样。我的问题是我读过这么多我的眼睛都在受伤,我无法弄清楚如何申报friggin变量。
请帮忙!!
这是我到目前为止所读到的内容:
resource 1, resource 2, resource 3,resource 4,resource 5
我可以继续。我真的被卡住了。我是SQL的新手,这让我烦恼不已。我不需要使用SP,但我真的很想,所以我可以学习dos和donts,并希望能够学到足够的帮助。
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 )
我已经尝试了很多我在互联网上看到的组合,以至于我开始认为它在晚上做得太晚了。如果你看一下我看过的一些资源,你会看到我在哪里看到'@'和没有的区别。
答案 0 :(得分:1)
如果要创建存储过程,则需要使用正确的语法。
请参阅:http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html
请注意,在proc主体内部,您需要使用;
终止每个语句。
因为你需要让MySQL知道body proc何时结束,你需要将分隔符重新声明为不是;
的东西。
这将阻止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');
它将返回带有CustomerName
和MenuID
的结果集。