Передайте переменную в запрос SELECT CURSOR (MySQL) - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь хранимую процедуру ниже. Однако, когда я передаю фактическое имя столбца в строке 'DECLARE cur1', SP возвращает правильное значение, но когда я передаю имя переменной, т.е. входной параметр (colName), он возвращает 0. Я добавил комментарии в своем коде ниже. Код правильный?

DROP PROCEDURE IF EXISTS test1.checkHardcodedField;
CREATE PROCEDURE test1.checkHardcodedField(IN textValue CHAR(10), colName CHAR(10), OUT counter VARCHAR(100))
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE temp CHAR(16);
  DECLARE i INT DEFAULT 0;

  -- Issue with this statement, returns incorrect value.
  DECLARE cur1 CURSOR FOR SELECT colName FROM data1;   

  -- This statement works. MSH3 is actual column name
  -- DECLARE cur1 CURSOR FOR SELECT MSH3 FROM data1; 

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur1;

  read_loop: LOOP
    FETCH cur1 INTO temp;

    IF done THEN
      LEAVE read_loop;
    END IF;
    IF temp = textValue THEN
      SET i = i + 1;
    END IF;
  END LOOP;

  SET counter = i;

  CLOSE cur1;
END;

1 Ответ

0 голосов
/ 19 февраля 2020
CREATE PROCEDURE procedure_name (..., fieldname VARCHAR, ...)
BEGIN
    CREATE TEMPORARY TABLE tmp (field VARCHAR(10));
    SET @sql := CONCAT('INSERT INTO tmp SELECT ', fieldname, ' FROM tablename;');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DROP PREPARE stmt;
    BEGIN
        DECLARE cur CURSOR FOR SELECT field FROM tmp;
        ...
    END;
    DROP TABLE tmp;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...