另一个变量mysql中的变量名

时间:2013-03-05 17:55:36

标签: mysql variables loops cursor session-variables

情况是我有一个mysql存储过程,它有一些变量,我想根据SELECT使用它们的值来获取我在循环中真正需要的变量列表:

MyTable(varId, varName, typeId)  
(0,var1,1)  
(1,var2,2)

MyValues(MyVar1,MyVar2)
(1,2)

以下是我想做的事情:

DECLARE var1 ;  
DECLARE var2 ;  

SELECT MyVar1,MyVar2 INTO var1,var2 FROM MyValues; 
CURSOR curs FOR  
SELECT varName FROM Mytable WHERE typeId = 1;

LOOP  
FETCH curs INTO varName;  
  SELECT sqrt(varName.value);  //Should be 1 because var1 =1;
END LOOP;

似乎不可能用准备好的函数来做,除非我使用会话变量,但实际上我动态地接收var1var2(在curs中)并且我无法将其提取到会话变量中。

有人能给我一些解决这个问题的想法吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

首先,为什么要将变量存储在SESSION中? 如果你可以在程序中使用它们,你也可以在程序中使用它们。

同样,如果您需要返回它们,您可以在过程中返回结果集,并在Web编程或应用程序中捕获它们。像:

SELECT @var1, @var2

还有一件事,我不确定我是否正确,但如果您想从外部(您的Web应用程序)获取变量,您也可以将它们作为参数传递。像:

$mysqli->query("CALL procedure_name($parameter1, $parameter2)");

问题编辑后: 我不明白这个..

CURSOR curs FOR  
SELECT varName FROM Mytable WHERE typeId = 1;

LOOP  

为什么在这里使用光标来选择? 无论如何,我想,你想在下一行使用' varName '。您可以将其存储在另一个变量中:

DECLARE a_variable VARCHAR(50);
SELECT varName INTO a_variable FROM Mytable WHERE typeId = 1;

这里你得到* a_variable *里面的值 使用它:

SELECT sqrt(a_variable);//NOT like varName.value

这是否回答了你的问题?请告诉我。

编辑#3: 我在这里提出了你的问题:

  

//应为1,因为var1 = 1;

以下是您需要使用的代码:

SET @query = CONCAT('select SQRT(@', var_name, ') as square_root');
     -- SELECT @query;
    PREPARE stmt FROM @query;
    EXECUTE stmt;

以下是我尝试过的完整程序:

DELIMITER $$

CREATE PROCEDURE `test_var`(
)
BEGIN
    DECLARE var1 int;  
    DECLARE var2 int; 
    DECLARE var_name varchar(50);

    SELECT MyVar1,MyVar2 INTO @var1,@var2 FROM MyValues;
    SELECT varName INTO var_name FROM Mytable WHERE typeId = 1;

    SET @query = CONCAT('select SQRT(@', var_name, ') as square_root');
     -- SELECT @query;
    PREPARE stmt FROM @query;
    EXECUTE stmt;

END

希望,这有帮助。请告诉我。

此致 Mayukh