所以我写了一个程序,它应该在一个变量中连接两个字符串,然后将它存储在DB中。当我运行它时,该过程正常,但它不会将变量存储在db中。相反,它将其存储为0。 这是我用的代码
select memFname, memLname into fn, ln from member where memberid = memid;
SET v_name := fn || ' ' || ln ;
insert into profile(memberid, fullName) values (memid, v_name);
fn,ln和v_name是varchar类型的变量。 memid是整数类型的变量。 我在这里错过了什么吗?
我正在使用触发器调用该过程。
触发代码
DELIMITER $$
create trigger prof_name
after insert on member
for each row
begin
call profile_fullname(new.memberid);
END $$;
DELIMITER ;
成员表结构: memberid整数, memfname varchar, memlname varchar。
个人资料表结构: profid整数, memberid整数。
答案 0 :(得分:0)
默认情况下,MySQL中的||
运算符是逻辑运算符。您正在使用它作为concat,这就是我认为您使用Oracle的原因。作为逻辑运算符,它会将每个参数转换为逻辑表达式,其值为0
或1
。显然,它正在将它们转换为0
s,这就是你在表中获得0
的原因。替代方案是1
,这不是更有趣。
正确的解决方案是使用concat()
代替||
。您也可以根据需要将系统变量PIPES_AS_CONCAT
设置为使用||
,但通常只有在尝试在数据库之间移植代码时才设置。
以下是示例:
update profile
set fullName = (select concat(memFname, ' ', memLname) from member m where m.memberid = memid)
where profile.memberid = memid;
如果你真的想要一个插入,它看起来像这样:
insert into profile(memberid, fullname)
select memid, concat(memFname, ' ', memLname)
from member m
where m.memberid = memid;