【问题标题】:MYSQL Stored Procedures INSERT FailsMYSQL 存储过程 INSERT 失败
【发布时间】:2015-05-31 14:39:08
【问题描述】:

我使用的是 MYSQL 5.5 版 我正在尝试插入以下过程:

CREATE PROCEDURE  `myTestProceed3ure` ( IN _id INT ) 
IF( SELECT COUNT( * ) FROM  `tbl_search_counter` WHERE user_id = u_userid ) >0
THEN 
(SELECT COUNT( * ) FROM  `tbl_search_counter` WHERE user_id = u_userid);       
ELSE
(INSERT INTO  `tbl_search_counter` (`user_id` ,`time_searched`) VALUES ('165',  '7'));       
END IF

但无论出于何种原因,我都会收到以下错误消息

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 'INSERT INTO tbl_search_counter (user_id,time_searched) 附近 第 6 行的 VALUE'

我真的不明白,因为当我执行以下请求时,我没有遇到问题

CREATE PROCEDURE  `myTestProceed2ure` ( IN  `_id` INT ) 
INSERT INTO  `tbl_search_counter` (`user_id`, `time_searched`) VALUES ('15',  '7')

或以下

CREATE PROCEDURE  `myTestProceed3ure` ( IN _id INT ) 
IF( SELECT COUNT( * ) FROM  `tbl_search_counter` WHERE user_id = u_userid ) >0
THEN 
(SELECT COUNT( * ) FROM  `tbl_search_counter` WHERE user_id = u_userid);
ELSE 
(SELECT COUNT( * ) FROM  `tbl_search_counter` WHERE user_id = u_userid);
END IF

如果有人知道我做错了什么,请告诉我...

谢谢

【问题讨论】:

  • 看看你在proc中使用的变量。错了
  • 请说明您希望存储过程做什么。
  • 我认为你在存储过程中错过了 BEGAIN 一个 END ......所以检查一下语法:)
  • 我发现,我不应该把括号放在 INSERT 函数之前,如果我这样做它可以工作

标签: mysql stored-procedures insert


【解决方案1】:

您的存储过程应该做什么?您没有将参数引用到存储过程,u_userid 似乎未定义。

如果您只想插入一个当前不存在的id,那么这是一种方法:

CREATE PROCEDURE  `myTestProceed3ure` (IN _id INT ) 
    INSERT INTO  tbl_search_counter(user_id, time_searched)
        VALUES (_id,  '7')
        ON DUPLICATE KEY UPDATE user_id = values(user_id)    
END IF;

【讨论】:

  • 目前我只想让它工作,然后我会更改代码。让我试试你的语法然后回来,谢谢
  • 它不起作用,我想做的是增加。如果用户存在,我们会增加 time_searched。如果用户不存在,我们将他添加到数据库中。链接到我在您的请求中收到的错误消息postimg.org/image/715n1v34v
  • 我发现,我不应该把括号放在 INSERT 函数之前,如果我这样做它可以工作
【解决方案2】:

最终答案:我不应该将 () 放在 INSERT 之前...

CREATE PROCEDURE  `myTestProceed3ure` ( IN _id INT ) 
IF( SELECT COUNT( * ) FROM  `tbl_search_counter` WHERE user_id = u_userid ) >0
THEN 
(SELECT COUNT( * ) FROM  `tbl_search_counter` WHERE user_id = u_userid);       
ELSE
INSERT INTO  `tbl_search_counter` (`user_id` ,`time_searched`) VALUES ('165',  '7');       
END IF

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 2014-08-17
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多