gpt4 book ai didi

mysql - 插入命令中的用户定义函数

转载 作者:行者123 更新时间:2023-11-30 22:20:52 25 4
gpt4 key购买 nike

我创建了一个函数:

DELIMITER $$  

DROP FUNCTION IF EXISTS `heena`.`customer_id`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `heena`.`customer_id`(
a varchar(20),
b varchar(20)
) RETURNS varchar(50) CHARSET latin1
DETERMINISTIC
BEGIN
RETURN CONCAT(
(select ((id), 0) + 1
from heenaj),
substring(a,1,2),
substring(b,1,2));
END;$$

DELIMITER ;

代码执行得很好,但是当我插入一个值时使用:

insert into heenaj
(c_id,name,number)
values
(customer_id121("abcd",9868275817),"abcd",9868275817);

显示错误:

Column 'c_id' cannot be null

最佳答案

您的 RETURN 有问题。

也许你打算这样做,虽然我只是猜测:

RETURN CONCAT(
(select ifnull(max(id), 0) + 1
from heenaj),
substring(a,1,2),
substring(b,1,2));

sqlfiddle

然后,您将调用 customerid121() 而不是 customer_id()。这可能是错字吗?

另外,看看你想做什么:你想要你的 id 作为 auto_increment 并且只想拥有 c_id作为 id,与 name 的前 2 个字符连接并与 number 的前 2 个字符连接?

我建议另一种解决方案。删除函数并为 INSERT 之前创建一个 TRIGGER 可能会更好,如下所示:

CREATE TRIGGER set_customer_id BEFORE INSERT on heenaj
FOR EACH ROW
BEGIN
SET NEW.c_id = CONCAT((SELECT IFNULL(MAX(id),0)+1 FROM heenaj),SUBSTRING(NEW.name,1,2),SUBSTRING(NEW.number,1,2));
END/

这样,当您插入时,您可以忽略 c_id 并像这样插入:

insert into heenaj(name,number)
values ("abcd",9868);

触发器将为您处理c_id 的设置。 sqlfiddle for TRIGGER

附言为了创建触发器(在 sqlfiddle 中),我选择了 / 作为分隔符。您可以将 / 更改为 $$,因为您将分隔符设置为 $$

关于mysql - 插入命令中的用户定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36665425/

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