我需要帮助循环遍历列并将值插入列。
我的对象: - 使用存储过程将新值插入表中的选择列 我正在使用case语句进行选择性选择并循环更新列列表
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `loopcolnm1`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `loopcolnm1`()
BEGIN
DECLARE sColName VARCHAR(255);
DECLARE sEgStr VARCHAR(255);
DECLARE X INT;
SET segstr = ' ';
SET X = 0;
Loop_label : LOOP
IF X > 9 THEN LEAVE loop_label;
END IF;
SET X = X+1;
CASE
WHEN X= 1 THEN
SET sColName = 'age' ;
WHEN X= 2 THEN SET sColName = 'Gender' ;
WHEN X= 3 THEN SET sColName = 'incm_rng' ;
WHEN X= 4 THEN SET sColName = 'Prc_rng' ;
WHEN X= 5 THEN SET sColName = 'prop_purp';
WHEN X= 6 THEN SET sColName = 'time_rng' ;
WHEN X= 7 THEN SET sColName = 'time_rsn' ;
WHEN X= 8 THEN SET sColName = 'crrnt_dmcl' ;
WHEN X= 9 THEN SET sColName = 'Prop_Rsn' ;
ELSE SET sColName = '\'All\' as Sub_Crit';
END CASE ;
SET sEgStr = CONCAT(sEgstr,' ',X, ' ',',' ,sColName, ' '); -- test variable
INSERT INTO lptable (sColName)
VALUE ( CONCAT('loop + ',X));
END LOOP;
SELECT segstr AS cnct;
END$$
DELIMITER ;
或者我尝试使用类似的solution但是,在两个实例上我都会收到错误
编辑(1) - 附加信息
当我编译存储过程时,它不会抛出任何错误消息,但是当我调用存储过程时
CALL loopcolnm1();
错误代码:1054未知栏' sColName'在'字段列表'
我是mysql的新手,我不确定这是否是我可以做的事情,或者我在语法上犯了错误,请帮助
答案 0 :(得分:0)
您的插入语句错误。您不能直接使用变量sColName
作为列名。您应该通过连接部分字符串来生成INSERT
查询字符串。
这是错误的:
INSERT INTO lptable (sColName) VALUE ( CONCAT('loop + ',X));
您必须使用VALUES
,但不能使用VALUE
。
您还需要准备好的语句来执行动态组合的SQL语句。
您需要在程序中进行以下更改。
BEGIN
...
DECLARE table_fields_str VARCHAR( 255 );
DECLARE values_str VARCHAR( 255 );
DECLARE _temp_sql_insert_str VARCHAR( 255 );
SET table_fields_str = CONCAT( 'INSERT INTO lptable (', sColName, ') ' );
SET values_str = CONCAT( ' VALUES( CONCAT( ''loop '', ', X, ' ) )' );
SELECT CONCAT( table_fields, values_str ) INTO @_temp_sql_insert_str;
PREPARE stmt FROM @_temp_sql_insert_str;
EXECUTE stmt;
END;