【问题标题】:SyntaxcError on MySQL QueryMySQL 查询的语法错误
【发布时间】:2009-03-17 07:34:16
【问题描述】:

我创建了一个程序并运行它,但它显示了一些语法问题,你能帮帮我吗?

我的程序是这样的:

**DELIMITER $$
CREATE PROCEDURE TestAdd(
    in mODE varchar(10),
    in Id int,
    in AttName varchar(10),
    in AttValues Varchar(10)
)
IF EXISTS (SELECT * FROM AttTable WHERE id=Id) THEN
    SET Mode='Modify'
ELSE 
    SET Mode='Add'
    Start Transaction
    BEGIN
        IF (mODE='Add') THEN
            insert into atttable values (Id, AttName, AttValue);
        ELSE (if Mode='Modify') then
            update AttTable set AttName=AttName, AttValue= AttValue where Id=Id;
        END IF 
    END
$$
Delimiter ;**

【问题讨论】:

  • 你需要告诉我们它是如何失败的。
  • 它应该做什么?它实际上在做什么?为什么它没有被格式化为至少一点可读性?
  • 另外,请查看 SELECT FOR UPDATE 语法,否则您最终会遇到竞争条件
  • 只需使用 INSERT...ON DUPLICATE KEY UPDATE 语法,整个事情就可以变得更简单
  • @yaauie:你应该把它作为答案发布,这是解决这个问题的正确方法......更不用说你应该得到一些代表来努力阅读这个烂摊子:)

标签: mysql stored-procedures


【解决方案1】:

您需要一个BEGIN,紧跟在开头的参数列表之后,并在过程结束时匹配一个END

create procedure TestAdd(blah...)
BEGIN
  ...

END$$

您的第一个IF 呼叫缺少THENEND IF

if exists ( select * from AttTable where  id=Id) THEN
  set...
ELSE
  set...
END IF

每个语句都需要以; 结束

set Mode='Modify';
set Mode='Add';
Start Transaction;

【讨论】:

  • 你确定语句必须以 ; 结尾
猜你喜欢
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2015-09-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多