J'essaie de définir et d'initialiser une variable MySQL pour une requête.
J'ai ce qui suit:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
J'utilise MySQL dans Netbeans et cela me dit que j'ai une erreur. Quelle est/où est mon erreur?
Comment puis-je réparer cela?
MySQL a deux types de variables différents:
variables locales (qui ne le sont pas préfixé par @
) sont fortement typés et étendus au bloc de programme stocké dans lequel ils sont déclarés. Notez que, comme indiqué sous DECLARE
Syntaxe :
DECLARE
n'est autorisé qu'à l'intérieur d'unBEGIN ... END
instruction composée et doit être à son début, avant toute autre instruction.
variables utilisateur (lesquelles sont préfixées par @
) sont lâchement saisis et étendus à la session. Notez qu'ils ne doivent ni ne peuvent être déclarés - utilisez-les directement.
Par conséquent, si vous définissez un programme stocké et souhaitez réellement une "variable locale", selon le libellé de votre question, vous devrez supprimer le @
et assurez-vous que votre instruction DECLARE
se trouve au début de votre bloc de programme. Sinon, pour utiliser une "variable utilisateur", supprimez l'instruction DECLARE
.
De plus, vous devrez soit entourer votre requête entre parenthèses afin de l'exécuter en tant que sous-requête:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
Sinon, vous pouvez utiliser SELECT ... INTO
:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
Essaye ça:-
select @countTotal := COUNT(*) from nGrams;
Exemple de fonction:
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 ;
Selon DECLARE Syntax , declare
doit être à l'intérieur d'un bloc begin ... end.