0

我正在尝试创建一个从我的表中提取以 J 开头的任何员工姓名的函数

delimiter $$
create function myfunction(nume_persoane varchar (30)) returns int deterministic
begin
declare omcucap int;
select first_name into omcucap  from employee where id = nume_persoane and first_name = 'J%';
return omcucap;
end $$

当我调用select myfunction(first_name) from employee;它返回的函数时null。这是为什么?什么解释。。

4

3 回答 3

1
omcucap int;

你的first_name是int类型吗?我不这么认为。

并考虑以下更改

UPPER(first_name) LIKE 'J%';

您不能将 = 用于 '%'

于 2013-03-25T09:41:27.897 回答
0

您的参数“nume_persoane”设置为员工的 ID

从员工中选择 first_name 进入 omcucap,其中 id = nume_persoane 和 first_name = 'J%';

但是你用 first_name 调用你的函数

选择我的函数(first_name)

而且 first_name 不是 int 还是?但是您尝试将 first_name 插入到声明的变量中

声明 omcucap int;
选择 first_name 进入 omcucap ...

更新

使用这些功能:

delimiter $$
create function myfunction(p1 int) returns int
begin
declare eID int;
select id into eID  from employee where id = p1 and first_name LIKE 'J%';
return eID;
end $$

并使用这些选择语句执行该函数:

SELECT myfunction(id) FROM employee;
于 2013-03-25T09:46:15.607 回答
0

要完成 shazin 答案,使其工作,您可能需要将 omcucap 声明为 varchar。

declare omcucap varchar(first_name size);

而且我不认为 id 是 varchar。所以 nume_persoane 会int(id size)代替。返回类型将是varchar(first_name size)

你的功能将是

delimiter $$
create function myfunction(nume_persoane int(10)) returns varchar(50) deterministic
begin
declare omcucap varchar(50);
select first_name into omcucap  from employee where id = nume_persoane and first_name LIKE 'J%' LIMIT 1;
return omcucap;
end $$

50 是你的first_name尺寸,10是你的 id 尺寸。
我添加LIMIT 1声明以避免很少的结果问题。

编辑
如果您不想使用默认值,请使用:

select IFNULL(first_name, 'default_value') into omcucap[...]
于 2013-03-25T09:44:44.763 回答