【发布时间】:2012-01-22 21:24:25
【问题描述】:
目标是根据输入变量更改 Mysql 存储过程中的查询字符串。
类似这样的:
CREATE DEFINER=`root`@`localhost` PROCEDURE `func`(type VARCHAR(15))
BEGIN
SET @type = type;
-- Check for the sort parameter
if @type="asc" THEN
SET @sort = " order by name asc";
elseif @type="desc" THEN
SET @sort = " order by name desc";
else
SET @sort ="";
end if;
SELECT id, name from table @sort;
END
【问题讨论】:
-
解决方法是使用execute,concat:CREATE DEFINER=
root@localhostPROCEDUREtest(input VARCHAR(15)) BEGIN SET @input = input; if @input="asc" 然后 SET @sort = " order by ActivityLogKey asc"; elseif @input = "desc" 然后 SET @sort = "order by ActivityLogKey desc";否则 SET @sort ="";万一; SET @query = CONCAT('select * from activitylog',@sort,'limit 0, 5');准备来自@query的stmt;执行语句; DEALLOCATE PREPARE stmt;结束 -
如果这是您没有将其添加为答案并接受它或用它编辑您的问题的解决方案。
-
没有100名声望,我要等8个小时才能回答我自己的问题
-
@BenGuthrie:然后等等。限制没有到位,因为开发人员希望您将答案发布在错误的位置;之所以实施,是因为他们希望您等待。这是有原因的。
-
@TomalakGeret'kal 好建议。谢谢。
标签: mysql stored-procedures logic