0

我有一个表结构如下

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 。

4

2 回答 2

0

这里不需要存储过程。您可以使用准备好的语句方便地解决这个问题。

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;

在此处阅读有关准备好的语句的更多信息。

于 2012-08-24T13:04:50.850 回答
0

你必须修改你的存储过程!您还需要使用 IN 关键字:

CREATE PROCEDURE mp_user_preference(IN pFruitName VARCHAR(255))
BEGIN 
     SELECT @lngCount = COUNT(Sno) 
       FROM eatables
      WHERE Name = pFruitName;

     SELECT @lngCount; 
END

http://www.mysqltutorial.org/stored-procedures-parameters.aspx

编辑:如果你想返回 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
于 2012-08-24T12:22:11.503 回答