Mysql 将过程错误转换为条件错误
我有一个过程,当我尝试执行mysql时,它会显示错误,错误出现在下一个条件中:Mysql 将过程错误转换为条件错误,mysql,stored-procedures,conditional,Mysql,Stored Procedures,Conditional,我有一个过程,当我尝试执行mysql时,它会显示错误,错误出现在下一个条件中: IF END_GAL > 0 THEN SET DIFF = (END_GAL - INI_GAL); SET V_DIFF = CAST(DIFF AS VARCHAR(50)); SET V_END_GAL = CAST(END_GAL AS VARCHAR(50)); ELSE SET V_DIFF = 'N/A'; SET V_END_GAL = 'NOT UPDATED'; END
IF END_GAL > 0 THEN
SET DIFF = (END_GAL - INI_GAL);
SET V_DIFF = CAST(DIFF AS VARCHAR(50));
SET V_END_GAL = CAST(END_GAL AS VARCHAR(50));
ELSE
SET V_DIFF = 'N/A';
SET V_END_GAL = 'NOT UPDATED';
END IF;
我包括所有程序,mysql显示消息:
1064-您的SQL语法有错误;检查手册
对应于您的MySQL服务器版本,以便使用正确的语法
近"瓦查尔(50),;设置V_END_GAL=CAST(END_GAL为VARCHAR(50));'在
第46行
未将VARCHAR
列为合法转换之一。请尝试将其转换为固定宽度CHAR(50)
DELIMITER $$
CREATE PROCEDURE `hourly_gas_change`(IN dateReport varchar(50), IN tank INT)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE INI_DATE DATE;
DECLARE INI_GAL INT;
DECLARE END_GAL INT;
DECLARE DIFF INT;
DECLARE V_HOUR VARCHAR(50);
DECLARE V_INI_GAL VARCHAR(50);
DECLARE V_END_GAL VARCHAR(50);
DECLARE V_DIFF VARCHAR(50);
DECLARE INITIALDATA CURSOR FOR
SELECT
DATE,
GALLONS
FROM TLS_TEMP_DATA
WHERE FK_TANK = tank
AND DATE LIKE '%:01:%'
AND (DATE BETWEEN CONCAT(dateReport, ' 00:00:00') AND CONCAT(dateReport, ' 10:59:59'))
ORDER BY ID;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
DROP TABLE IF EXISTS HOURLYGASCHANGE;
CREATE TEMPORARY TABLE IF NOT EXISTS HOURLYGASCHANGE (
`HOUR_DATA` VARCHAR(50) NOT NULL,
`INI_GAL` VARCHAR(50) NOT NULL,
`END_GAL` VARCHAR(50) NOT NULL,
`DIFF` VARCHAR(50) NOT NULL)
ENGINE=MEMORY;
OPEN INITIALDATA;
READ_LOOP: LOOP
FETCH INITIALDATA INTO INI_DATE, INI_GAL;
IF done THEN
LEAVE READ_LOOP;
END IF;
SET END_GAL = -1;
SELECT
GALLONS INTO END_GAL
FROM TLS_TEMP_DATA
WHERE FK_TANK = tank
AND DATE LIKE CONCAT(DATE_FORMAT(DATE_ADD(DATE_FORMAT(INI_DATE, '%Y-%m-%d %H'), INTERVAL 1 HOUR), '%Y-%m-%d %H'),':%')
AND (DATE LIKE '%:01:%' OR DATE LIKE '%:06:%')
ORDER BY DATE;
IF END_GAL > 0 THEN
SET DIFF = (END_GAL - INI_GAL);
SET V_DIFF = CAST(DIFF AS VARCHAR(50));
SET V_END_GAL = CAST(END_GAL AS VARCHAR(50));
ELSE
SET V_DIFF = 'N/A';
SET V_END_GAL = 'NOT UPDATED';
END IF;
SET V_INI_GAL = CAST(INI_GAL AS VARCHAR(50));
SET V_HOUR = CAST(DATE_FORMAT(INI_DATE, '%H') AS VARCHAR(50));
INSERT INTO HOURLYGASCHANGE VALUES(V_HOUR, V_INI_GAL, V_END_GAL, V_DIFF);
END LOOP;
close INITIALDATA;
SELECT * FROM HOURLYGASCHANGE;
END $$
DELIMITER ;
DROP PROCEDURE IF EXISTS `hourly_gas_change`;