声明和使用 MySQL varchar 变量

发布于 2024-09-28 01:18:56 字数 575 浏览 1 评论 0原文

我正在尝试使用 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;

我也尝试用 BEGIN...END; 包装它。并作为一个程序。在这种情况下,MySQL Workbench 会很有帮助地告诉我:第一行是“')'附近的 SQL 语法错误”,第二行是“'DECLARE oldFOO varchar(7)'附近的 SQL 语法错误”。否则,它会将这两行完整地显示为错误,并在两行上显示“SQL 语法错误接近...”。

编辑:我忘了提及我已经尝试过在变量上使用和不使用@s。有些资源有它,有些则没有。

我犯了什么愚蠢的错误?

I'm trying to do some simple manipulations with variables in MySQL 5.0 but I can't quite get it to work. I've seen many (very!) different syntax for DECLARE/SET, I'm not sure why... in any case I'm presumably confusing them/picking the wrong one/mixing them.

Here's a minimal fragment that fails:

DECLARE FOO varchar(7);
DECLARE oldFOO varchar(7);
SET FOO = '138';
SET oldFOO = CONCAT('0', FOO);

update mypermits 
   set person = FOO 
 where person = oldFOO;

I've also tried wrapping it with BEGIN... END; and as a PROCEDURE. In this case MySQL Workbench helpfully tells me: "SQL syntax error near ')'" on the first line and "SQL syntax error near 'DECLARE oldFOO varchar(7)'" on the second. Otherwise it gives both lines as errors in full, with "SQL syntax error near ..." on both.

Edit: I forgot to mention that I've tried it with and without @s on the variables. Some resources had it with, others without.

What dumb mistake am I making?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

终难遇 2024-10-05 01:18:56

这对我使用 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 ;

表:

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()

This works fine for me using 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 ;

Table:

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()
镜花水月 2024-10-05 01:18:56

我使用 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;

I ran into the same problem using MySQL Workbench. According to the MySQL documentation, the DECLARE "statement declares local variables within stored programs." That apparently means it is only guaranteed to work with stored procedures/functions.

The solution for me was to simply remove the DECLARE statement, and introduce the variable in the SET statement. For your code that would mean:

-- 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;
鹤仙姿 2024-10-05 01:18:56

看来您忘记了变量声明中的@。我还记得很久以前在 MySql 中遇到 SET 问题。

尝试

DECLARE @FOO varchar(7);
DECLARE @oldFOO varchar(7);
SELECT @FOO = '138';
SELECT @oldFOO = CONCAT('0', @FOO);

update mypermits 
   set person = @FOO 
 where person = @oldFOO;

Looks like you forgot the @ in variable declaration. Also I remember having problems with SET in MySql a long time ago.

Try

DECLARE @FOO varchar(7);
DECLARE @oldFOO varchar(7);
SELECT @FOO = '138';
SELECT @oldFOO = CONCAT('0', @FOO);

update mypermits 
   set person = @FOO 
 where person = @oldFOO;
陌伤浅笑 2024-10-05 01:18:56

试试这个:

declare @foo    varchar(7),
        @oldFoo varchar(7)

set @foo = '138'
set @oldFoo = '0' + @foo

try this:

declare @foo    varchar(7),
        @oldFoo varchar(7)

set @foo = '138'
set @oldFoo = '0' + @foo
居里长安 2024-10-05 01:18:56

在Mysql中,我们可以使用set命令声明和使用变量,如下所示

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

In Mysql, We can declare and use variables with set command like below

mysql> set @foo="manjeet";
mysql> select * from table where name = @foo;
故人如初 2024-10-05 01:18:56

如果您使用 phpmyadmin 添加新例程,请不要忘记将代码包装在 BEGIN 和 END 之间在此处输入图像描述

If you are using phpmyadmin to add new routine then don't forget to wrap your code between BEGIN and ENDenter image description here

黯然#的苍凉 2024-10-05 01:18:56
Declare @variable type(size);

Set @variable = 'String' or Int ;

例子:

 Declare @id int;
 set @id = 10;

 Declare @str char(50);
 set @str='Hello' ; 
Declare @variable type(size);

Set @variable = 'String' or Int ;

Example:

 Declare @id int;
 set @id = 10;

 Declare @str char(50);
 set @str='Hello' ; 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文