web-dev-qa-db-ja.com

MySQLローカル変数

クエリのMySQL変数を定義および初期化しようとしています。

私は次のものを持っています:

declare @countTotal int;
SET @countTotal = select COUNT(*)
 from nGrams;

NetbeansでMySQLを使用していますが、エラーがあることがわかります。私のエラーは何ですか?

どうすれば修正できますか?

27

MySQLには2種類の変数があります。

  • ローカル変数(これはではない接頭辞@)が強く型付けされ、保存されたプログラムブロックにスコープされますそれらは宣言されています。 DECLARE構文 で文書化されているように、注意してください。

    DECLAREBEGIN ... END 複合ステートメント内でのみ許可され、他のステートメントの前に開始する必要があります。

  • ユーザー変数 (これはare接頭辞@)が緩く型付けされスコープされますセッションへ。これらは宣言する必要もなければ宣言もできないことに注意してください。直接使用するだけです。

したがって、ストアドプログラムを定義していて、実際に「ローカル変数」が必要な場合は、質問の文言ごとに、@文字を削除し、DECLAREステートメントがプログラムブロックの開始時。それ以外の場合、「ユーザー変数」を使用するには、DECLAREステートメントを削除します。

さらに、クエリをサブクエリとして実行するには、クエリを括弧で囲む必要があります。

SET @countTotal = (SELECT COUNT(*) FROM nGrams);

または、 SELECT ... INTO を使用できます。

SELECT COUNT(*) INTO @countTotal FROM nGrams;
41
eggyal

これを試して:-

 select @countTotal := COUNT(*) from nGrams;
6
Rahul Tripathi

関数の例:

DROP FUNCTION IF EXISTS test;

DELIMITER $$
CREATE FUNCTION test(in_number INT) RETURNS INT
    BEGIN
        DECLARE countTotal INT;
        SET countTotal = SELECT COUNT(*) FROM nGrams;
    RETURN countTotal + in_number;
END $$
DELIMITER ;
2
alditis

DECLARE Syntax によると、declareはbegin ... endブロック内になければなりません。

1
Olaf Dietsche