有没有办法在游标声明的ORDER BY子句中具有变量?

Nic*_*ers 0 mysql sql stored-procedures sql-order-by cursor

我希望能够在游标声明的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.)
Run Code Online (Sandbox Code Playgroud)

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

Guf*_*ffa 5

输出根据您提供的输入(即字符串值)进行排序,因为所有行都获得相同的值,因此实际上根本不进行排序。

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

order by case col_sort
  when 'col1' then col1
  when 'col2' then col2
  when 'col3' then col3
end
Run Code Online (Sandbox Code Playgroud)

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

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