创建MySQL程序

我目前正试图在我的MySQL上创建一个存储过程,存储在谷歌云平台上。

SQL是正确的,看到我可以在本地创建过程,但我想不通为什么它不会从命令行工作。

mysql> CREATE PROCEDURE helpme
    -> (
    ->  @cid varchar(4)
    -> )
    -> AS
    -> DECLARE @res_cnt INT
    -> DECLARE @name CHAR(10)
    ->
    -> SELECT @res_cnt = COUNT(*) FROM dbo.TripGuides WHERE GuideNum = @cid
    -> SELECT @name = LastName FROM dbo.Guide WHERE GuideNum = @cid
    -> PRINT @name + ' has ' +  CAST (@res_cnt AS VARCHAR(10))+' guides.';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@cid varchar(4)
)
AS
DECLARE @res_cnt INT
DECLARE @name CHAR(10)

SELECT @res_cn' at line 3
mysql>

我试了一些不同的东西,谢谢我碰到了。当声明 @cid 我都试过了

@cid CHAR(4)
@cid VARCHAR(4)

导致同样的错误被抛出。

解决方案:

对于MySQL的使用

CREATE PROCEDURE helpme ( cid VARCHAR(4) )
SELECT CONCAT( ( SELECT LastName 
                 FROM Guide 
                 WHERE GuideNum = cid ), 
               ' has ', 
               ( SELECT COUNT(*) 
                 FROM TripGuides 
                 WHERE GuideNum = cid ), 
               ' guides.'
             ) AS message;

只是出于好奇,我如何去声明res_cnt和name,就像我之前做的原始SQL调用一样?

CREATE PROCEDURE helpme ( cid VARCHAR(4) )
BEGIN
    DECLARE res_cnt INT;
    DECLARE `name` CHAR(10);

    SELECT COUNT(*) INTO res_cnt FROM TripGuides WHERE GuideNum = cid;
    SELECT LastName INTO `name` FROM Guide WHERE GuideNum = cid;
    SELECT CONCAT( `name`, ' has ', res_cnt, ' guides.' ) AS output_message;
END

而且不要忘了这种情况下DELIMITER的重新赋值。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在ARKit中设置ARCamera曝光时间

2022-9-8 16:41:35

未分类

React-Native-Video -> 如何保存视频?

2022-9-8 16:41:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索