【问题标题】:MySQL - Pass input parameter into Cursor queryMySQL - 将输入参数传递给游标查询
【发布时间】:2020-05-29 10:03:00
【问题描述】:

是否可以将输入参数传递给 Cursor SELECT 语句的 WHERE 子句?

出于某种原因,我认为它不起作用。

我正在尝试将 _TAG 和 _ITEM_NAME 传递到 where 子句中。

DECLARE cursor_test cursor for SELECT itemid  FROM items WHERE  key_ LIKE "sometext_@_TAG_sometext_@_ITEM_NAME" AND STATUS = '0';

这里是存储过程:

DELIMITER //
CREATE PROCEDURE getSomething(IN _HOSTNAME VARCHAR(20), _TAG VARCHAR(20), _ITEM_NAME VARCHAR(50))
BEGIN
declare FINISHED BOOL default false;

DECLARE cursor_test cursor for SELECT itemid  FROM items WHERE hostid = @_HOSTID AND key_ LIKE "sometext_@_TAG_sometext_@_ITEM_NAME" AND STATUS = '0';

DECLARE CONTINUE HANDLER for not found set FINISHED := true;

SET @HOSTNAME = _HOSTNAME;

PREPARE STMT1 FROM

"SELECT hostid INTO @_HOSTID FROM hosts  WHERE NAME = ?";

EXECUTE STMT1 USING @HOSTNAME;
DEALLOCATE PREPARE STMT1;

open cursor_test;
   SET @TOTAL_VALUE := 0;
   loop_itemid: loop
        fetch cursor_test into _ITEMID;
        SELECT _ITEMID;
        if FINISHED then
            leave loop_itemid;
        end if;
        SET @TOTAL_VALUE := @TOTAL_VALUE + (SELECT value from history_uint WHERE itemid = _ITEMID ORDER BY clock DESC LIMIT 1);

   end loop loop_itemid;
   SELECT @TOTAL_VALUE;
close cursor_test;

END //

【问题讨论】:

    标签: mysql stored-procedures cursor


    【解决方案1】:

    感谢akina's comment。在条件有效的情况下使用 CONCAT。

    WHERE key_ LIKE CONCAT('sometext_', _TAG, '_sometext_', _ITEM_NAME)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2017-09-27
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多