96

単一の値を変数に SELECT したいと思います。私は次のことを試みました:

DECLARE myvar INT(4);

-- すぐに構文エラーを返します。

SELECT myvalue 
  FROM mytable 
 WHERE anothervalue = 1;

-- 単一の整数を返します

SELECT myvalue 
  INTO myvar 
  FROM mytable 
 WHERE anothervalue = 1;

-- 動作しません。@myvar も試しました

ストアド プロシージャまたは関数の外で DECLARE を使用することは可能ですか?

たぶん、ユーザー変数の概念を理解していないだけです...試してみました:

SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;

...想定どおりに機能しました。しかし、一度に各クエリを実行すると、@var NULL が返されます。

4

11 に答える 11

116

この同じ問題に遭遇しましたが、混乱の原因はわかっていると思います。MySQL Query Analyzer を使用している場合は、これをうまく実行できます。

SELECT myvalue 
INTO @myvar 
FROM mytable 
WHERE anothervalue = 1;

ただし、同じクエリを MySQL Workbench に配置すると、構文エラーがスローされます。なぜ違うのかわかりませんが、違います。

MySQL Workbench でこの問題を回避するには、クエリを次のように書き換えます。

SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;
于 2011-09-07T18:46:34.553 に答える
47

結局、ストアドプロシージャが私の問題の解決策でした。

助けたのは次のとおりです。

DELIMITER //

CREATE PROCEDURE test ()
BEGIN
  DECLARE myvar DOUBLE;
  SELECT somevalue INTO myvar FROM mytable WHERE uid = 1;

  SELECT myvar;
END//

DELIMITER ;

call test();
于 2010-06-19T11:57:36.097 に答える
46

これらの回答は、複数の変数をうまくカバーしていません。

ストアド プロシージャでインライン割り当てを行うと、それらの結果も結果セットに返されます。それは混乱を招く可能性があります。複数の変数で SELECT...INTO 構文を使用するには、次のようにします。

SELECT a, b INTO @a, @b FROM mytable LIMIT 1;

SELECT は 1 行のみを返さなければならないため、LIMIT 1 になりますが、常に必要というわけではありません。

于 2014-09-09T21:51:40.503 に答える
15

MySQLのドキュメントによると、 DECLARE はストアド プログラムのように BEGIN...END ブロックの開始時にのみ機能します。

于 2010-06-19T10:26:59.033 に答える
12

MySQLで変数を宣言する必要はありません。変数のタイプは、最初に値が割り当てられたときに自動的に決定されます。その型は、整数、10進数、浮動小数点、2進または非2進文字列、またはNULL値のいずれかになります。詳細については、ユーザー定義変数のドキュメントを参照してください。

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

SELECT ... INTOを使用して、列を変数に割り当てることができます。

http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html

例:

mysql> SELECT 1 INTO @var;
Query OK, 1 row affected (0.00 sec)

mysql> SELECT @var;
+------+
| @var |
+------+
| 1    |
+------+
1 row in set (0.00 sec)
于 2010-06-19T10:36:23.607 に答える
4

SELECT INTO次のようなグローバル変数を使用できるという事実にもかかわらず、注目に値します。

SELECT ... INTO @XYZ ...

次のようなグローバル変数は使用できません。FETCH INTO

FETCH ... INTO @XYZ

バグではないようです。誰かの役に立てば幸いです...

于 2014-01-30T03:05:01.643 に答える