まず、なぜ変数を SESSION に保存したいのでしょうか? プロシージャ内で取得できる場合は、プロシージャ内で使用することもできます。
繰り返しになりますが、それらを返す必要がある場合は、プロシージャ内で結果セットを返し、Web プログラミングまたはアプリケーションでそれらをキャッチできます。お気に入り:
SELECT @var1, @var2
もう1つ、私はあなたが正しいかどうか確信が持てませんが、外部(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:
ここであなたの質問を間違えました:
//var1 =1 であるため、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
お役に立てれば。私にお知らせください。
よろしくマユク