gpt4 book ai didi

mysql - 声明和设置变量以测试 SP 和查询之间的差异

转载 作者:行者123 更新时间:2023-11-29 00:34:54 25 4
gpt4 key购买 nike

我正在尝试解决另一个问题 here .一位成员告诉我,为了找到问题的答案,我需要更改查询以匹配 SP。为了做到这一点,我被告知要声明变量,所以我像在 SP 中一样使用变量。我的问题是我读了太多书,眼睛都疼了,我不知道如何声明该死的变量。

请帮忙!!

这是我目前阅读的内容:

resource 1 , resource 2 , resource 3 , resource 4 , resource 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 )

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

最佳答案

如果你想创建一个存储过程,你需要使用正确的语法。

参见: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');

它会返回一个包含 CustomerNameMenuID 的结果集。

关于mysql - 声明和设置变量以测试 SP 和查询之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14795680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com