stored - Variables locales de MySQL
variables locales en mysql (4)
Estoy tratando de definir e inicializar una variable MySQL para una consulta.
Tengo los siguientes
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
Estoy usando MySQL en Netbeans y me dice que tengo un error. ¿Qué / dónde está mi error?
¿Cómo puedo arreglar esto?
De acuerdo con la sintaxis DECLARE , declare
debe estar dentro de un bloque begin ... end.
Ejemplo de función:
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 ;
MySQL tiene dos tipos diferentes de variable:
las variables locales (que no tienen el prefijo
@
) se escriben y se restringen fuertemente al bloque de programa almacenado en el que se declaran. Tenga en cuenta que, como se documenta en la sintaxisDECLARE
:DECLARE
está permitido solo dentro de una declaración compuestaBEGIN ... END
y debe estar al comienzo, antes de cualquier otra declaración.las variables de usuario (que son prefijadas por
@
) se escriben y se ajustan a la sesión. Tenga en cuenta que ni necesitan ni pueden ser declarados, simplemente utilícelos directamente.
Por lo tanto, si está definiendo un programa almacenado y realmente desea una "variable local", de acuerdo con la redacción de su pregunta, deberá eliminar el carácter @
y asegurarse de que su declaración DECLARE
esté al comienzo de su bloque de programa. De lo contrario, para utilizar una "variable de usuario", elimine la sentencia DECLARE
.
Además, tendrá que rodear su consulta entre paréntesis para ejecutarla como una subconsulta:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
O bien, podrías usar SELECT ... INTO
:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
Prueba esto:-
select @countTotal := COUNT(*) from nGrams;