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;
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'' ;