【问题标题】:Is there a way to have a variable in the ORDER BY clause of a cursor declaration?有没有办法在游标声明的 ORDER BY 子句中有一个变量?
【发布时间】:2012-03-04 02:07:39
【问题描述】:

我希望能够在游标声明的 order by 子句中使用参数变量。我正在使用 MySQL 5.5.21。这是我尝试使用的代码。没有错误,但是输出没有按我在参数中提供的列排序。

CREATE PROCEDURE getData(IN start_id INT, IN end_id INT, IN col_sort VARCHAR(16), IN max_date DATE)
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE id_num INT;
    DECLARE rid_num LONG;
    DECLARE cur1 CURSOR FOR SELECT `ID`,`rid` FROM `clients` WHERE `rid` > 0 AND `date_live` < max_date ORDER BY col_sort LIMIT start_id, end_id;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur1;
(etc.)

我很想知道这是否可以做到。我不想为每个可能的列定义多个存储过程。提前致谢。

【问题讨论】:

    标签: mysql sql stored-procedures cursor sql-order-by


    【解决方案1】:

    输出按您提供的输入排序,即字符串值,实际上根本没有排序,因为所有行都获得相同的值。

    您需要case 来按不同的列排序:

    order by case col_sort
      when 'col1' then col1
      when 'col2' then col2
      when 'col3' then col3
    end
    

    这当然需要所有列的数据类型相同。如果您有不同的数据类型,则每种数据类型都需要一个case

    另一种选择是通过连接字符串来创建 SQL,然后执行它。

    【讨论】:

    • 酷!我没想过使用 CASE。
    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多