Mysql 声明和设置变量以测试SP和查询之间的差异
我正试图解决另一个问题。一位成员告诉我,为了找到问题的答案,我需要更改查询以匹配SP。为了做到这一点,我被告知要声明变量,所以我使用变量就像我在SP中一样。我的问题是我读了太多的书,眼睛都痛了,我不知道如何声明变量 请帮忙 这是我到目前为止读到的: ,, , , 我可以继续下去。我真的被卡住了。我是SQL新手,这让我很烦。我不需要使用SP,但我真的很想这样做,这样我就可以学习应该做什么和不应该做什么,并希望能学到足够的东西来帮助别人Mysql 声明和设置变量以测试SP和查询之间的差异,mysql,stored-procedures,procedure,Mysql,Stored Procedures,Procedure,我正试图解决另一个问题。一位成员告诉我,为了找到问题的答案,我需要更改查询以匹配SP。为了做到这一点,我被告知要声明变量,所以我使用变量就像我在SP中一样。我的问题是我读了太多的书,眼睛都痛了,我不知道如何声明变量 请帮忙 这是我到目前为止读到的: ,, , , 我可以继续下去。我真的被卡住了。我是SQL新手,这让我很烦。我不需要使用SP,但我真的很想这样做,这样我就可以学习应该做什么和不应该做什么,并希望能学到足够的东西来帮助别人 DECLARE zipcode VARCHAR(30) DEC
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 )
我从网上看到的东西中尝试了很多组合,我开始觉得现在做更多的事情已经太晚了。如果你看一看我看过的一些资源,你会发现我看到了带@和不带@的区别 如果要创建存储过程,需要使用正确的语法 见: 请注意,在proc主体中,您需要使用;终止每个语句 因为您需要让MySQL知道body进程何时结束,并且需要将分隔符重新声明为非a;。 这将阻止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 ;
它将返回一个带有CustomerName和MenuID的结果集。如果要创建存储过程,需要使用正确的语法 见: 请注意,在proc主体中,您需要使用;终止每个语句 因为您需要让MySQL知道body进程何时结束,并且需要将分隔符重新声明为非a;。 这将阻止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 ;
它将返回一个带有CustomerName和MenuID的resultset。这解释了为什么我不能声明变量。非常感谢!这就解释了为什么我不能声明变量。非常感谢!请回答我的问题。