首先,为什么要将变量存储在 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
希望这可以帮助。请告诉我。
问候马尤赫