带约束的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;
阅读更多关于准备好的声明