Как объявить переменную, содержащую результат запроса select в хранимой процедуре? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть процедура хранения MySql, в которой у меня есть переменная, которая будет содержать результат запроса select,
Но я не могу использовать переменную, так как считаю, что нужно объявить переменные с их типами данных в хранимой процедуре.

Ниже приведен фрагмент того, что я пытаюсь сделать -

CREATE DEFINER=`root`@`localhost` PROCEDURE `backups`()
BEGIN
    DECLARE snapshot_year INT;
    DECLARE partition_year VARCHAR(17);
    #DECLARE isPartionPresent;

    SET snapshot_year := DATE_FORMAT(NOW(),'%Y');
    SET partition_year := CONCAT('backups',snapshot_year);

    SET isPartionPresent := (SELECT PARTITION_NAME
        FROM
            INFORMATION_SCHEMA.PARTITIONS
        WHERE
            TABLE_NAME = 'backups'
            AND PARTITION_NAME = @partition_year);

    IF @isPartionPresent IS NOT NULL THEN
        #Do something
    ELSE
        #Do something
    ENDIF
END

У меня ошибка синтаксиса с isPartionPresent varibale.

1 Ответ

1 голос
/ 26 июня 2019

Вы смешиваете локальные переменные с пользовательскими переменными. Между ними есть разница.

Подробнее о различиях в руководстве:

Просто решите, какой тип переменной вы хотите использовать. Ваша процедура должна работать с этим, например:

delimiter $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `backups`()
BEGIN
    DECLARE snapshot_year INT;
    DECLARE partition_year VARCHAR(17);
    DECLARE isPartionPresent varchar(64);

    SET snapshot_year := DATE_FORMAT(NOW(),'%Y');
    SET partition_year := CONCAT('backups',snapshot_year);

    SET isPartionPresent := (SELECT PARTITION_NAME
        FROM
            INFORMATION_SCHEMA.PARTITIONS
        WHERE
            TABLE_NAME = 'backups'
            AND PARTITION_NAME = partition_year);

    IF isPartionPresent IS NOT NULL THEN
        -- do something
        select now(); -- dummy statement to avoid syntax error
    ELSE
        -- do something
        select now(); -- dummy statement to avoid syntax error
    END IF;
END$$
delimiter ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...