问题描述
我在 MysqL 版本 (6.0.11-alpha-community) 中创建了一个带 CRUD 操作的参数化存储过程
DELIMITER $$
CREATE PROCEDURE `mae`.`USP_CustomersToken_CURD`(IN CID INT,IN CName VARCHAR(50),IN CToken VARCHAR(250),IN CTokenTime DATETIME,IN OPType INT)
BEGIN
IF (OPType = 1) --Insert
THEN
INSERT INTO tbl_CustomersTokenInfo (ID,CustomerName,Token,TokenTime) VALUES (CID,CName,CToken,CTokenTime)
ELSEIF (OPType = 2) --delete
THEN
DELETE FROM tbl_CustomersTokenInfo WHERE ID = CID
ELSEIF (OPType = 3) --Update
THEN
UPDATE tbl_CustomersTokenInfo SET CustomerName = CName,Token = CToken,TokenTime = CTokenTime WHERE ID = CID
ELSEIF (OPType = 4) --Select
THEN
SELECT * FROM tbl_CustomersTokenInfo WHERE ID =CID
ELSEIF (OPType = 5)--Fetch
THEN
SELECT * FROM tbl_CustomersTokenInfo
END IF
END$$
DELIMITER ;
但是当我执行这个 SP 时,我收到以下错误:
查询:CREATE PROCEDURE mae
.USP_CustomersToken_CURD
(IN CID INT,IN CTokenTime DATETI...
错误代码:1064 您的 sql 语法有错误;检查与您的 MysqL 服务器版本相对应的手册,了解在“THEN”附近使用的正确语法 INSERT INTO tbl_CustomersTokenInfo (ID,TokenTime) VAL' 在第 4 行
执行时间:0秒 传输时间:0 秒 总时间:0秒
我是 MysqL 命令和语法的新手,如果我犯了任何错误,请提供最佳方法。
解决方法
- MySQL(与大多数其他 DBMS 不同)不喜欢用
--
引入的注释,其中--
后面没有空格。 - 您需要使用
IF
终止所有语句,包括END IF
语句(在;
之后)。
更正:
DELIMITER $$
CREATE PROCEDURE `mae`.`USP_CustomersToken_CURD`(IN CID INT,IN CName VARCHAR(50),IN CToken VARCHAR(250),IN CTokenTime DATETIME,IN OPType INT)
BEGIN
IF (OPType = 1) -- Insert
THEN
INSERT INTO tbl_CustomersTokenInfo (ID,CustomerName,Token,TokenTime) VALUES (CID,CName,CToken,CTokenTime);
ELSEIF (OPType = 2) -- delete
THEN
DELETE FROM tbl_CustomersTokenInfo WHERE ID = CID;
ELSEIF (OPType = 3) -- Update
THEN
UPDATE tbl_CustomersTokenInfo SET CustomerName = CName,Token = CToken,TokenTime = CTokenTime WHERE ID = CID;
ELSEIF (OPType = 4) -- Select
THEN
SELECT * FROM tbl_CustomersTokenInfo WHERE ID =CID;
ELSEIF (OPType = 5)-- Fetch
THEN
SELECT * FROM tbl_CustomersTokenInfo;
END IF;
END$$
DELIMITER ;