gpt4 book ai didi

MySQL SP 不返回结果?变量问题?

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

一个简单的问题:我已将数据库从 MSSQL 转移到 MySQL,并且现在正在转换存储过程。但是,这个在执行时似乎无法正常运行(我可以创建它,但当我运行它时我没有得到任何结果):

DELIMITER $$

CREATE PROCEDURE `Employee_GetAll`(
IN community_id int,
IN search varchar(255)
)
BEGIN

select e.*, er.name as rolename, er.access_level as accesslevel from Employee e
inner join Employee_Role er on e.employee_role = er.id
where e.community_id = community_id
and (firstname like ('%' + search + '%') or lastname like ('%' + search + '%'));

END

所以,我可以创建它,但是当我运行它时没有给出结果。如果我运行这段代码...

select e.*, er.name as rolename, er.access_level as accesslevel from Employee e
inner join Employee_Role er on e.employee_role = er.id
where e.community_id = 1
and (firstname like ('%do%') or lastname like ('%do%'));

...然后就可以正常运行了。那么,我对 SEARCH 变量做错了什么吗?我是 MySQL 新手,正在尝试即兴发挥。

问候,

鲍勃

最佳答案

几个问题:

  1. 不要为参数指定与列名称相同的名称
  2. 使用 CONCAT() 构建 LIKE 模式。
  3. 由于这是一个单语句过程,因此您无需使用 BEGIN...END block 并更改 DELIMITER

话虽如此,尝试一下这种方式

CREATE PROCEDURE `Employee_GetAll`(
IN _community_id INT,
IN _search VARCHAR(255)
)
SELECT e.*, er.name AS rolename, er.access_level AS accesslevel
FROM Employee e JOIN Employee_Role er
ON e.employee_role = er.id
WHERE e.community_id = _community_id
AND (firstname LIKE CONCAT('%', _search, '%') OR
lastname LIKE CONCAT('%', _search, '%'));

这里是SQLFiddle 演示

关于MySQL SP 不返回结果?变量问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21059512/

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