MySQL:光标从临时表中选择
问题描述:
我需要select column
从temp
表中存储过程cursor
。MySQL:光标从临时表中选择
这里是我的尝试下面的脚本:
尝试:
DELIMITER $$
CREATE PROCEDURE `sptest2`(IN nm VARCHAR(50),IN sub VARCHAR(50))
BEGIN
DECLARE dp char(50);
DECLARE colmn_list varchar(100);
SET @q = CONCAT('CREATE TEMPORARY TABLE IF NOT EXISTS tem AS
(SELECT DISTINCT ', nm ,' AS Col FROM table1)');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DECLARE cursor_n CURSOR for select col from tem;
注意:这使我的错误。因为我们在某些操作后不能declare cursor
。我们需要在BEGIN
之后声明它。
那么这是什么解决方案?
答
的所有声明必须被放置在开始程序:
DELIMITER $$
CREATE PROCEDURE `sptest2`(IN nm VARCHAR(50),IN sub VARCHAR(50))
BEGIN
DECLARE dp char(50);
DECLARE colmn_list varchar(100);
DECLARE cursor_n CURSOR for select col from tem;
SET @q = CONCAT('CREATE TEMPORARY TABLE IF NOT EXISTS tem AS
(SELECT DISTINCT ', nm ,' AS Col FROM table1)');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
但是根据您的要求,是一个更好的解决方案使用子查询。
在尝试创建它之前可能是一个好主意drop table,因为它的功能将被调用多次。
DROP TEMPORARY TABLE IF EXISTS tem;
+0
但是,我怎样才能不使用'光标'多行存储到变量?我怎样才能使用子查询呢? – Meem 2014-10-10 12:31:52
我建议你不要使用游标。您可以通过子查询实现相同的功能 – 2014-10-10 11:03:19
@RonakShah,对不起!但我是MySQL的新手,你能否详细说明一下? – Meem 2014-10-10 11:06:05
没问题Meem,我认为你想用游标来逐行迭代并做一些处理。它会比你使用子查询或加入缓慢 – 2014-10-10 11:12:46