我有一个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
变量语法错误。
答案 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 ;