我正在尝试编写一个Mysql函数,如果根据提供的参数存在记录,则返回contactID。如果记录不存在,我将添加记录,然后返回新记录的contactID。 但是这个函数丢了1048error,如果我写错了,你可以检查并纠正我。
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `GetContactID`(accountNumber CHAR(45),UserID INT(11)) RETURNS char(1) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE ContactID INT DEFAULT 0;
SELECT ContactID INTO @ContactID FROM Contact WHERE AccountNumber = @accountNumber AND UserID = @UserID AND Status =1;
IF ContactID = 0 or ContactID is null THEN
INSERT INTO Contact(AccountNumber,UserID) VALUES (@accountNumber,@UserID);
SELECT ContactID INTO @ContactID FROM Contact WHERE AccountNumber = @accountNumber AND UserID = @UserID;
END IF;
RETURN ContactID;
END
有人可以在我出错的地方帮助我。 感谢
答案 0 :(得分:0)
混淆用户变量,局部变量和参数会导致问题
@UserId
与UserId
不同 - 它们是不同的变量
UserId
也是表格中列的名称。
@var_name
,存储在用户会话中,可用于在引用它们的不同存储例程之间传递值,有关详细信息,请参阅此链接:{ {3}} DECLARE
关键字在存储例程中声明试试这段代码:
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `GetContactID`(p_accountNumber CHAR(45),p_UserID INT(11)) RETURNS char(1) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE v_ContactID INT DEFAULT 0;
SELECT ContactID INTO v_ContactID
FROM Contact
WHERE AccountNumber = p_accountNumber AND UserID = p_UserID AND Status =1;
IF v_ContactID = 0 or v_ContactID is null THEN
INSERT INTO Contact(AccountNumber,UserID)
VALUES (p_accountNumber,p_UserID);
SELECT ContactID INTO v_ContactID FROM Contact
WHERE AccountNumber = p_accountNumber AND UserID = p_UserID;
END IF;
RETURN v_ContactID;
END;
请注意:
p_
v_
这些前缀有助于避免歧义 - 我们知道p_UserID
是参数,v_UserId
是局部变量,UserID
是表中的列名(如果我们使用的话) @UserId
,我们知道这是用户变量。