一、MySQL存储过称中,有两种声明参数的定义
1.用关键字-DECLARE
如:DECLARE exresult int;
2.用关键字-SET
如:SET @Uid=paramUid;
在两者使用时,我有一些困惑。它们到底有什么区别?或者说,分别在什么情况下使更合适?(等待高人指点迷津!)
---------------------------------------------------------------------------------------------------------------
先说说我的理解吧!
先给个例子,然后分别讨论
BEGIN
SET @Uid=paramUid;
SET @Countnum=-10;
SET @TableName='hot_caller';
SET @SELECT_COUNT_SQL=CONCAT('SELECT COUNT(callid) into @Countnum FROM ', @TableName,' WHERE uid=@Uid ' );
PREPARE rcallcount FROM @SELECT_COUNT_SQL;
EXECUTE rcallcount;
IF (@Countnum <= 0 ) THEN
SELECT callid FROM hot_caller;
ELSE
IF @Countnum >0 THEN
SELECT * FROM hot_caller;
END IF;
END IF;
END
1.当表名为动态参数时,参数需要使用CONCAT()方法将动态表名变量进行组装。这时,必须用@参数。
2.两者都支持类型的操作,比如int型的加、减、乘、除等操作。如:SET @参数=值 ;参数=值。
3.两种参数之间可以互相赋值。如:SET @参数=参数; 参数=@参数;
所以,我在写存储过程时,就对这两种参数的选用,有了困惑。所以,贴出来,大家 研究探讨,共同进步!