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

标签 mysql

我正在尝试编写一个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/

相关文章:

mysql - Bash - 在 Ubuntu 18 中从 mysql-client 解析中分割字符串的问题

mysql - MySQL 中 CASE 语句中的 REGEXP

mysql - 如何在 MySQL GROUP BY 中按 DATE 返回第一条记录?

php - 来自两个表的 $_GET[ID]

mysql - 删除一个表中有语法错误的相同数据(mysql)

MySQL基于带分隔符的子字符串选择带有LIKE或REGEX的列字符串

php - SQL 脚本在 phpmyAdmin 中有效,但在网站 echo 中无效

java - 根据从数据库中检索到的文本选择 jButton

c# - 无法以 C# windows 形式连接到任何指定的 MySQL 主机

php - 使用空间多边形(边界)查找点