【问题标题】:stored procedure with count(*) and if statement带有 count(*) 和 if 语句的存储过程
【发布时间】:2015-04-22 08:49:15
【问题描述】:

我对这段 sql 代码有疑问。

我有一张表friends,其中包含三列user1, user2, pending

user1user2 是数据类型 int 的主键。

phpmyadmin 返回此错误:

MySQL 说:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'Declare var int; 附近使用的正确语法; Set var = SELECT COUNT(*) FROM friends WHERE ((user1 = id1 A' at line 1

注意 - 我是通过 phphmyadmin 完成的,所以我有 这是我的代码:

Declare var int; 
Set var = SELECT COUNT(*) FROM friends WHERE ((user1 = id1 AND user2=id2) OR (user1 = id2 AND user2=id1));
IF var = 0                                 
 BEGIN
    INSERT INTO friends
                ( user1, user2,pending)
         VALUES (id1, id2,1);
    Print 'Data now added.';
 END
ELSE
 BEGIN
     Print 'Dah! already exists';
 END

【问题讨论】:

  • 您似乎在混合使用 SQL Server 和 MySQL 语法。
  • @gvee 我已经删除了 sql-server 标记,因为错误与 MySQL 相关,但同意看起来像 sql-server proc。 benddror,你能澄清一下吗?
  • 我正在使用 phpmyadmin 意味着 MySql,如果那是你通过澄清所提到的。
  • 所以,有人可以告诉我它应该如何用 MySql 的语法编写

标签: mysql procedure


【解决方案1】:

尝试反转这两行:

...
declare @var int
AS
...

如下:

...
AS
declare @var int
...

【讨论】:

  • 谢谢你的回答,但它仍然给我同样的错误
  • 正如 gvee 和 Tanner 在您的问题的 cmets 中提到的,您似乎试图在 MySQL 中使用 MSSQL 语法。根据我的回答,您的程序在 MSSQL 中编译成功。所以可能在某个地方有一些误解。
  • 所以,有人可以告诉我它应该如何用 MySql 的语法编写
【解决方案2】:

1) 所有内容(包括声明)都必须在 BEGIN ... END 块中。

2) 您不需要(也不能)声明@session_veriables,只需声明local_variables

3) 缺少参数。它们必须在括号之间声明:proc_name(p1 INT, p2 INT)

4) 所有语句必须以; 结束

5) 整个过程应该包裹在里面:

DELIMITER ||
...
||
DELIMITER ;

除非你通过 phpMyAdmin 发送。

【讨论】:

  • 感谢您的回答,我做了您所说的所有事情,并在 google 中多浏览了一些内容,但没有找到为什么它仍然无法正常工作,我将代码更新为新代码,我也做到了通过 phpmyadmin...
  • 1 phpmyadmin 会自动将您的代码包含在 BEGIN ... END 中吗? 2 一些; 3 SET 语句中的子查询必须用括号括起来:SET var = (...);
  • 另外,没有打印功能。使用 SELECT 'Dah!已经存在';
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多