variable stored query declarar create sql mysql mysql-error-1064

stored - set variable mysql select



Declarar y usar variables varchar de MySQL (7)

En Mysql, podemos declarar y usar variables con el comando set como abajo

mysql> set @foo="manjeet"; mysql> select * from table where name = @foo;

Estoy tratando de hacer algunas manipulaciones simples con variables en MySQL 5.0 pero no logro que funcione. He visto muchos (muy!) Sintaxis diferentes para DECLARAR / CONFIGURAR, no estoy seguro de por qué ... en cualquier caso, presumiblemente los estoy confundiendo / escogiendo el incorrecto / mezclándolos.

Aquí hay un fragmento mínimo que falla:

DECLARE FOO varchar(7); DECLARE oldFOO varchar(7); SET FOO = ''138''; SET oldFOO = CONCAT(''0'', FOO); update mypermits set person = FOO where person = oldFOO;

También he intentado envolverlo con BEGIN ... END; y como PROCEDIMIENTO. En este caso, MySQL Workbench me dice: "Error de sintaxis SQL cerca de '')''" en la primera línea y "Error de sintaxis SQL cerca de ''DECLARE oldFOO varchar (7)''" en la segunda. De lo contrario, muestra ambas líneas como errores completos, con "error de sintaxis SQL cerca de ..." en ambas.

Edición: olvidé mencionar que lo he intentado con y sin @s en las variables. Algunos recursos lo tenían con, otros sin.

¿Qué error tonto estoy haciendo?


Esto funciona bien para mí usando MySQL 5.1.35:

DELIMITER $$ DROP PROCEDURE IF EXISTS `example`.`test` $$ CREATE PROCEDURE `example`.`test` () BEGIN DECLARE FOO varchar(7); DECLARE oldFOO varchar(7); SET FOO = ''138''; SET oldFOO = CONCAT(''0'', FOO); update mypermits set person = FOO where person = oldFOO; END $$ DELIMITER ;

Mesa:

DROP TABLE IF EXISTS `example`.`mypermits`; CREATE TABLE `example`.`mypermits` ( `person` varchar(7) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO mypermits VALUES (''0138''); CALL test()


Me encontré con el mismo problema usando MySQL Workbench. Según la documentación de MySQL , la declaración DECLARE "declara variables locales dentro de los programas almacenados". Eso aparentemente significa que solo está garantizado para trabajar con procedimientos / funciones almacenados.

La solución para mí fue simplemente eliminar la sentencia DECLARE e introducir la variable en la sentencia SET . Para su código eso significaría:

-- DECLARE FOO varchar(7); -- DECLARE oldFOO varchar(7); -- the @ symbol is required SET @FOO = ''138''; SET @oldFOO = CONCAT(''0'', FOO); UPDATE mypermits SET person = FOO WHERE person = oldFOO;


Parece que olvidaste la @ en la declaración de variables. También recuerdo haber tenido problemas con SET en MySql hace mucho tiempo.

Tratar

DECLARE @FOO varchar(7); DECLARE @oldFOO varchar(7); SELECT @FOO = ''138''; SELECT @oldFOO = CONCAT(''0'', @FOO); update mypermits set person = @FOO where person = @oldFOO;


Si está utilizando phpmyadmin para agregar una nueva rutina, no olvide ajustar su código entre BEGIN y END


prueba esto:

declare @foo varchar(7), @oldFoo varchar(7) set @foo = ''138'' set @oldFoo = ''0'' + @foo


Declare @variable type(size); Set @variable = ''String'' or Int ;

Ejemplo:

Declare @id int; set @id = 10; Declare @str char(50); set @str=''Hello'' ;