📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

ユーザー定義変数

+2
D
T
d
q

このドキュメントでは、TiDB におけるユーザー定義変数の概念と、ユーザー定義変数を設定および読み取る方法について説明します。

ユーザー定義変数の形式は@var_nameです。 var_name構成する文字は、識別子を構成できる任意の文字(数字0-9 、文字a-zA-Z 、アンダースコア_ 、ドル記号$ 、UTF-8文字など)です。さらに、英語のピリオド.も含まれます。ユーザー定義変数は大文字と小文字を区別しません。

ユーザー定義変数はセッション固有であるため、1 つのクライアント接続で定義されたユーザー変数は、他のクライアント接続では表示または使用できません。

ユーザー定義変数を設定する

SETステートメント使ってユーザー定義変数を設定できます。構文はSET @var_name = expr [, @var_name = expr] ...;です。例えば:

SET @favorite_db = 'TiDB';
SET @a = 'a', @b = 'b', @c = 'c';

代入演算子には:=も使用できます。例:

SET @favorite_db := 'TiDB';

代入演算子の右側の内容は、任意の有効な式にすることができます。例:

SET @c = @a + @b;
SET @c = b'1000001' + b'1000001';

ユーザー定義変数を読み取る

ユーザー定義変数を読み取るには、 SELECTステートメントを使用してクエリを実行します。

SELECT @a1, @a2, @a3
+------+------+------+ | @a1 | @a2 | @a3 | +------+------+------+ | 1 | 2 | 4 | +------+------+------+

SELECTステートメントで値を割り当てることもできます。

SELECT @a1, @a2, @a3, @a4 := @a1+@a2+@a3;
+------+------+------+--------------------+ | @a1 | @a2 | @a3 | @a4 := @a1+@a2+@a3 | +------+------+------+--------------------+ | 1 | 2 | 4 | 7 | +------+------+------+--------------------+

変数@a4が変更される前、または接続が閉じられる前は、その値は常に7です。

ユーザー定義変数を設定する際に16進数リテラルまたはバイナリリテラルが使用された場合、TiDBはそれをバイナリ文字列として扱います。数値に設定したい場合は、手動でCASTに変換するか、式の中で数値演算子を使用してください。

SET @v1 = b'1000001'; SET @v2 = b'1000001'+0; SET @v3 = CAST(b'1000001' AS UNSIGNED);
SELECT @v1, @v2, @v3;
+------+------+------+ | @v1 | @v2 | @v3 | +------+------+------+ | A | 65 | 65 | +------+------+------+

初期化されていないユーザー定義変数を参照すると、その値は NULL で、型は文字列になります。

SELECT @not_exist;
+------------+ | @not_exist | +------------+ | NULL | +------------+

ユーザー定義変数の読み取りにはSELECT文を使用するほか、 PREPARE文もよく使用されます。例えば、次のようになります。

SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; PREPARE stmt FROM @s; SET @a = 6; SET @b = 8; EXECUTE stmt USING @a, @b;
+------------+ | hypotenuse | +------------+ | 10 | +------------+

ユーザー定義変数の内容は、SQL文では識別子として認識されません。例:

SELECT * from t;
+---+ | a | +---+ | 1 | +---+
SET @col = "`a`"; SELECT @col FROM t;
+------+ | @col | +------+ | `a` | +------+

MySQLの互換性

SELECT ... INTO <variable>を除いて、MySQL と TiDB でサポートされる構文は同一です。

詳細についてはMySQLのユーザー定義変数参照してください。

User-Defined Variables最終更新日 12/4/2024, 1:41:32 AM: *: init release-8.5 configs (#19545)

このページは役に立ちましたか?