gpt4 book ai didi

Mysql UDF 返回记录 id(如果存在),否则插入并返回 recordid`

转载 作者:行者123 更新时间:2023-11-30 00:51:11 39 4
gpt4 key购买 nike

我正在尝试编写一个Mysql函数,如果根据提供的参数存在记录,则返回contactID,如果记录不存在,我将添加记录,然后返回新记录的contactID。但该函数抛出 1048 错误,您能否检查并纠正我是否写错了。

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

有人可以帮我解决我出错的地方吗?谢谢

最佳答案

该问题是由用户变量、局部变量和参数混合造成的。

@UserIdUserId 不同 - 它们是不同的变量。
UserId 也是表中列的名称。

试试这个代码:

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,我们就知道这是用户变量)。

关于Mysql UDF 返回记录 id(如果存在),否则插入并返回 recordid`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956001/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com