31

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

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

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

Netbeans で MySQL を使用していますが、エラーが表示されます。私のエラーはどこですか?

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

4

4 に答える 4

48

MySQL には 2 つの異なるタイプの変数があります。

  • ローカル変数(接頭辞が付いていない@) は厳密に型指定され、宣言されているストアド プログラム ブロックにスコープが設定されます。DECLARESyntaxで説明されているように、次の点に注意してください。

    DECLAREは、複合ステートメント内でのみ許可されBEGIN ... END、他のステートメントの前に、その先頭に置く必要があります。

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

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

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

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

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

SELECT COUNT(*) INTO @countTotal FROM nGrams;
于 2012-12-02T15:29:37.313 に答える
6

これを試して:-

 select @countTotal := COUNT(*) from nGrams;
于 2012-12-02T15:26:12.207 に答える
3

関数の例:

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 ;
于 2012-12-02T15:26:30.920 に答える
1

DECLARE Syntaxによるとdeclare、begin...end ブロック内にある必要があります。

于 2012-12-02T15:31:42.283 に答える