Cha*_*les 25 mysql sql mysql-error-1064
我正在尝试使用MySQL 5.0中的变量进行一些简单的操作,但我无法让它工作.我见过DECLARE/SET的很多(非常!)不同的语法,我不知道为什么......无论如何我可能会混淆他们/选错了/混合他们.
这是一个失败的最小片段:
DECLARE FOO varchar(7);
DECLARE oldFOO varchar(7);
SET FOO = '138';
SET oldFOO = CONCAT('0', FOO);
update mypermits
set person = FOO
where person = oldFOO;
Run Code Online (Sandbox Code Playgroud)
我也试过用BEGIN包裹它......结束; 并作为程序.在这种情况下,MySQL Workbench有助于告诉我:第一行上的"SQL语法错误')'"和第二行上的"DECLARE oldFOO varchar(7)'附近的SQL语法错误".否则它会将两行都作为完整错误,两者都有"SQL语法错误接近...".
编辑:我忘了提到我已经在变量上使用和不使用@s.有些资源有,有些没有.
我犯了什么愚蠢的错误?
OMG*_*ies 29
这对我使用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 ;
Run Code Online (Sandbox Code Playgroud)
表:
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()
Run Code Online (Sandbox Code Playgroud)
我使用MySQL Workbench遇到了同样的问题.根据MySQL文档,DECLARE
"语句在存储程序中声明局部变量".这显然意味着它只能保证与存储过程/函数一起使用.
我的解决方案是简单地删除DECLARE
语句,并在语句中引入变量SET
.对于你的代码意味着:
-- 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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
127936 次 |
最近记录: |