mysql存储过程参数处理问题

aierduo 2010-08-17 11:05:50
表结构如下:
DROP TABLE IF EXISTS `testtb`;
CREATE TABLE `testtb` (
`id` int(11) NOT NULL auto_increment,
`amount` decimal(10,0) default NULL,
`tag` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of testtb
-- ----------------------------
INSERT INTO `testtb` VALUES ('1', '11', 'a b');
INSERT INTO `testtb` VALUES ('2', '22', 'c d');
INSERT INTO `testtb` VALUES ('3', '32', 'a d');
INSERT INTO `testtb` VALUES ('4', '43', 'a b');

我想建类似于下面的一个存储过程


DELIMITER $$

DROP PROCEDURE IF EXISTS `testDT`$$

CREATE PROCEDURE `testDT`(IN num VARCHAR(100)) -- num 的格式类似于 a b@c d@a d
BEGIN
SELECT SUM(amount) AS ttt FROM testtb
WHERE tag IN('a b','c d')
GROUP BY tag;

END$$

DELIMITER ;

其中 WHERE tag IN ('a b','c d')这个IN 参数是从num计算出来的。
我使用REPLACE(num,'@','\',\''),'\'')放到IN里面,得到的结果是错误的。
请问应该怎么做才是对的?
...全文
42 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aierduo 2010-08-18
谢谢 能用
回复
阿_布 2010-08-17

mysql> DELIMITER /
mysql>
mysql> DROP PROCEDURE IF EXISTS `testDT`/
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> CREATE PROCEDURE `testDT`(IN num VARCHAR(100)) -- num 的格式类似于 a b@c
d@a d
-> BEGIN
-> declare str varchar(200);
-> set @sql = concat('SELECT SUM(amount) AS ttt FROM testtb WHERE tag IN(','
\'',replace(num,'@','\',\''),'\') GROUP BY tag');
-> prepare str from @sql;
-> execute str;
-> deallocate prepare str;
-> END/
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> DELIMITER ;
mysql>
mysql> call testDT('a b@c d@a d');
+------+
| ttt |
+------+
| 54 |
| 32 |
| 22 |
+------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
回复
发动态
发帖子
MySQL
创建于2007-09-28

5.4w+

社区成员

MySQL相关内容讨论专区
申请成为版主
社区公告
暂无公告