クエリの MySQL 変数を定義して初期化しようとしています。
私は次のものを持っています:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
Netbeans で MySQL を使用していますが、エラーが表示されます。私のエラーはどこですか?
どうすればこれを修正できますか?
MySQL には 2 つの異なるタイプの変数があります。
ローカル変数(接頭辞が付いていない@
) は厳密に型指定され、宣言されているストアド プログラム ブロックにスコープが設定されます。DECLARE
Syntaxで説明されているように、次の点に注意してください。
DECLARE
は、複合ステートメント内でのみ許可されBEGIN ... END
、他のステートメントの前に、その先頭に置く必要があります。
ユーザー変数(接頭辞が)@
は、大まかに型指定され、セッションにスコープされます。これらは宣言する必要も、宣言することもできないことに注意してください。直接使用してください。
したがって、ストアドプログラムを定義していて、実際に「ローカル変数」が必要な場合は、質問の文言に従って、@
文字を削除し、DECLARE
ステートメントがプログラムブロックの先頭にあることを確認する必要があります。それ以外の場合、「ユーザー変数」を使用するには、DECLARE
ステートメントを削除します。
さらに、サブクエリとして実行するには、クエリを括弧で囲む必要があります。
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
または、次を使用できますSELECT ... INTO
。
SELECT COUNT(*) INTO @countTotal FROM nGrams;
これを試して:-
select @countTotal := COUNT(*) from nGrams;
関数の例:
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 ;
DECLARE Syntaxによるとdeclare
、begin...end ブロック内にある必要があります。