MySQL技巧系列之一:如何把一个由多个id拼接而成的id串作为参数传给存储过程
在存储过程的编写时,有时我们会想传一个id串进存储过程,传进去很简单,但是传进去后怎么用呢?
假设有如下测试表:
例子的查询也很简单
SELECT SUM(amt) 金额
FROM my_test_table WHERE auto_id IN (2,3,5) LIMIT 0,1;
好了,下面进入主题,如何把’2,3,5’当作一个参数传进存储过程,并实现这个查询呢?
我们第一想法就是
SET @p_idList = ‘2,3,5’;
SELECT SUM(amt) 金额
FROM my_test_table WHERE auto_id IN (@p_idList) LIMIT 0,1;
结果是错误的
显然不能把串简单的放进去,'2,3,5’它会认为是一个id,结果容错取到了2,所以合计它算出40。
正确的方法是把语句按字符串拼接的方法拼接起来,然后执行即可:
还可以把查询结果传给一个变量,触类旁通。
SET @p_idList = ‘2,3,5’;
SET @exec_sql = CONCAT('SELECT SUM(amt) INTO @amt ',
‘FROM my_test_table WHERE auto_id IN (’, @p_idList, ') ', ’ LIMIT 0,1 ');
PREPARE aaa FROM @exec_sql;
EXECUTE aaa;
DEALLOCATE PREPARE aaa;
SELECT @amt;
妙!高!实在是高!
总结:把一个由多个id拼接而成的id串当作参数传给存储过程后,不能简单放进查询中,应拼接成一个语句,通过EXECUTE 执行拼接的语句。