クエリのMySQL変数を定義および初期化しようとしています。
私は次のものを持っています:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
NetbeansでMySQLを使用していますが、エラーがあることがわかります。私のエラーは何ですか?
どうすれば修正できますか?
MySQLには2種類の変数があります。
ローカル変数(これはではない接頭辞@
)が強く型付けされ、保存されたプログラムブロックにスコープされますそれらは宣言されています。 DECLARE
構文 で文書化されているように、注意してください。
DECLARE
はBEGIN ... END
複合ステートメント内でのみ許可され、他のステートメントの前に開始する必要があります。
ユーザー変数 (これはare接頭辞@
)が緩く型付けされスコープされますセッションへ。これらは宣言する必要もなければ宣言もできないことに注意してください。直接使用するだけです。
したがって、ストアドプログラムを定義していて、実際に「ローカル変数」が必要な場合は、質問の文言ごとに、@
文字を削除し、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ブロック内になければなりません。