Luc*_*kyy 5 mysql stored-procedures
我今天卡在Mysql中,在mysql select语句中需要动态列名.让我解释:
sql> select name1 from namescollection.
sql> select name2 from namescollection.
sql> select name3 from namescollection.
Run Code Online (Sandbox Code Playgroud)
所以namescollection表有三列有name1,name2,name3我想在我的存储过程中查询这个表是1,2,3作为动态并且将作为变量传递,但是当我查询时也在简单的sql上:
SELECT concat('name','1') FROM `namescollection`
Run Code Online (Sandbox Code Playgroud)
name1 ----- name1 rather fetching name1 field's value.
可以对此进行任何建议,正确的功能我需要使用相当concat虽然我知道它在调用concat时输出name1的权利,但我想将它用作列名.
Zan*_*ien 10
你可以做的是在你的存储过程中使用一个准备好的语句,它允许你执行一个字符串查询:
举个简单的例子:
DELIMITER //
CREATE PROCEDURE selname (IN col VARCHAR(20))
BEGIN
SET @sql = CONCAT('SELECT ', col, ' FROM tbl');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
使用此SQLFiddle演示进行测试
小智 5
存储过程更新语句中的动态列名:
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `selname`()
BEGIN
declare cl int ;
declare clvalue int ;
set cl=1;
SET clvalue=1;
while cl < 4 DO
SET clvalue=clvalue*cl;
SET @sql = CONCAT('update test set col',cl, '=',clvalue,' where id=1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
set cl=cl+1;
end while;
END //
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11708 次 |
| 最近记录: |