带约束的Mysql语句
我有一个如下表结构带约束的Mysql语句,mysql,stored-procedures,Mysql,Stored Procedures,我有一个如下表结构 CREATE TABLE `eatables` ( `Sno` int(11) NOT NULL auto_increment, `Name` varchar(255) collate latin1_general_ci default NULL, PRIMARY KEY (`Sno`) ); 该表包含如下所示的行 insert into `eatables`(`Sno`,`Name`) values (1,'Apples'); insert in
CREATE TABLE `eatables` (
`Sno` int(11) NOT NULL auto_increment,
`Name` varchar(255) collate latin1_general_ci default NULL,
PRIMARY KEY (`Sno`)
);
该表包含如下所示的行
insert into `eatables`(`Sno`,`Name`) values (1,'Apples');
insert into `eatables`(`Sno`,`Name`) values (2,'Oranges');
insert into `eatables`(`Sno`,`Name`) values (3,'Papaya');
insert into `eatables`(`Sno`,`Name`) values (4,'Jackfruit');
insert into `eatables`(`Sno`,`Name`) values (5,'Pineapple');
insert into `eatables`(`Sno`,`Name`) values (6,'Mango');
我创建了一个过程来获取基于名称作为约束的计数
DROP PROCEDURE IF EXISTS proc_fruit_count;
CREATE PROCEDURE mp_user_preference(pFruitName VARCHAR(255))
BEGIN
SELECT @lngCount = COUNT(Sno)
FROM eatables
WHERE Name = pFruitName;
SELECT @lngCount;
END
但我的过程每次执行时都返回Null。您必须修改存储过程!您还需要在关键字中使用:
CREATE PROCEDURE mp_user_preference(IN pFruitName VARCHAR(255))
BEGIN
SELECT @lngCount = COUNT(Sno)
FROM eatables
WHERE Name = pFruitName;
SELECT @lngCount;
END
看
编辑:如果要返回lngCount,可以按如下方式修改存储过程:
CREATE PROCEDURE mp_user_preference(IN pFruitName VARCHAR(255), OUT toReturn INT)
BEGIN
SELECT @lngCount = COUNT(Sno)
FROM eatables
WHERE Name = pFruitName
INTO toReturn;
END
这里不需要存储过程。您可以通过准备好的语句方便地解决这个问题
prepare stmt from 'select count(*) from eatables where name = ?';
set @whatever = 'Mango';
execute stmt using @whatever; /* @whatever replaces the ? in the query above */
/* and if you don't need the prepared statement any more you do... */
deallocate prepare stmt;
阅读更多关于准备好的声明