56,677
社区成员
发帖
与我相关
我的任务
分享
DROP TABLE IF EXISTS alarm;
CREATE TABLE alarm ( id int(11) NOT NULL auto_increment, name varchar(255) default NULL,PRIMARY KEY (id));
INSERT INTO alarm (name) values('aa');
INSERT INTO alarm (name) values('bb');
DROP procedure if exists statalarm;
delimiter //
create procedure statalarm()
begin
SET @id = '1,2';
/*
下面的语句本意是组成 select * from alarm where id IN (1,2);
但调用结果只能查到id为1的记录
*/
SET @sql = 'select * from alarm where id IN (?)';
PREPARE stmt FROM @sql;
EXECUTE stmt USING @id;
DEALLOCATE PREPARE stmt;
/*
下面的语句调用是正确的。但为什么上面使用using @id 语句的结果不对呢?
*/
SET @sql = concat('select * from alarm where id IN (',@id,')');
PREPARE stmt FROM @sql;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt;
end;//
delimiter ;
SET @id = '1,2';
SET @sql = 'select * from alarm where id IN (?)';
select @sql;
2. 第一种方法拼出的字符串为什么会把字符串的引号也拼进去了呢?有没有办法只拼字符串的值进去,向c++的sprintf一样?