你好,我有一个任务:考虑一个有两个关系的雇员数据库:
employee(employee-name, street, city)
works(employee-name, company-name, salary)
其中主键带下划线。写一个查询,找出那些员工平均工资低于“第一银行公司”平均工资的公司。根据需要使用自定义sql函数(create function命令)回答上述查询,函数以公司名称作为输入,返回给定公司的平均工资。我创建了这个函数:
create function avg_salary (c_name varchar(30))
returns numeric(8,6)
begin
declare a_salary numeric(8,6);
select avg(salary) into a_salary
from works
where company.company_name = c_name
group by company_name;
return a_salary;
select company_name
from works
where a_salary<(select avg(salary) from works where company_name = ’ First Bank Corporation’);
end
但我收到一条错误信息:
错误1415(0a000):不允许从函数返回结果集
我不明白为什么我会犯这个错误。谢谢你的帮助
3条答案
按热度按时间2vuwiymt1#
试试这个(示例包括我用来创建所有对象和插入数据的所有代码):
它非常适合我,返回公司01和公司02作为结果。
原版海报评论后添加。查询现在返回平均工资和公司名称,
tf7tbtn22#
您应该结合教程阅读mysql手册来理解mysql的细节。
错误信息非常清楚(每个select返回一个结果集),因此select company\u name from works是错误的。选择into和set=(select…)可以。除了这个错误外,“first bank corporation”周围的单引号在我试图编译函数时也是奇数和错误。也可按公司名称分组;将在以后版本的my sql中被拒绝,因为选择列表中不包括公司名称。看到了吗https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html -在这种情况下,它是不需要的,因为你是一个特定的公司avgerageing。mysql还要求在create函数之前和之后设置分隔符,其中函数中有多个语句请参见https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html
oxosxuxt3#
尝试以下操作: