MySQL-将输入参数传递到游标查询中

问题描述 投票:0回答:1

是否有可能将输入参数传递给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个回答
0
投票

感谢akina's comment。在条件有效的地方使用CONCAT。

WHERE key_ LIKE CONCAT('sometext_', _TAG, '_sometext_', _ITEM_NAME)
© www.soinside.com 2019 - 2024. All rights reserved.