如何在存储过程中声明一个包含选择查询结果的变量?

时间:2019-06-26 08:32:46

标签: mysql sql

我有一个MySql存储过程,其中有一个变量,它将保存选择查询的结果,
但是我无法使用该变量,因为我相信必须在存储过程中声明变量及其数据类型。

以下是我正在尝试做的摘要-

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变量语法错误。

1 个答案:

答案 0 :(得分:1)

您正在将局部变量与用户定义的变量混合在一起。两者之间是有区别的。

详细了解手册中的区别:

只需确定要使用的变量类型。您的过程应与此配合使用,例如:

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 ;