【发布时间】:2018-08-22 00:28:16
【问题描述】:
下面是错误和存储过程,我有一个名为 dropdown 的表,它有两列,如 className 和主题我想要做的是当我抛出这些列名中的任何一个时,我需要获取该列数据。当我尝试创建以下程序时出现错误
错误
(0 row(s) affected)
(0 ms taken)
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@result;
DECLARE @query;
SET @result = '';
SET @query = CONCAT('SELE' at line 8
(0 ms taken)
我的程序
DELIMITER $$;
DROP PROCEDURE IF EXISTS `testdb`.`getDropdown`$$
CREATE PROCEDURE `testdb`.`getDropdown` (in i_column_name varchar(250))
L_return:
BEGIN
DECLARE sqlstate_code CHAR(5) DEFAULT '00000';
DECLARE message_text TEXT;
DECLARE mysql_errno INT;
DECLARE status VARCHAR(10);
DECLARE @result;
DECLARE @query;
SET @result = '';
SET @query = CONCAT('SELECT ',in_columnName,' FROM test.dropdown');
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
sqlstate_code = RETURNED_SQLSTATE,
mysql_errno = MYSQL_ERRNO,
message_text = MESSAGE_TEXT;
IF sqlstate_code <> '00000' THEN
SET @status = 'FATAL';
SELECT @status as status;
SELECT CONCAT(mysql_errno,': ',message_text) as ErrorMsg, 'Our System is down. We are working on it. Please come back in few minutes' as UserMsg;
END IF;
END;
PREPARE stmt FROM @query;
EXECUTE stmt using @result;
IF EXISTS(@result != '' OR @result IS NOT NULL)
THEN
SET @status = 'TRUE';
SELECT @status as status;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
LEAVE L_return;
ELSE
SET @status = 'FALSE';
SELECT @status as status;
SELECT CONCAT('No data in test.dropdown table')as ErrorMsg, CONCAT('Our System is down. We are working on it. Please come back in few minutes') as UserMsg;
LEAVE L_return;
END IF;
END$$
DELIMITER ;$$
【问题讨论】: