(1)存储包必须包含存储过程和存储函数; (2)存储过程要求实现如下功能: 1)入参部门名称为研发部时,出参返回该部门最低工资的人员的基本信息(10分); 2)入参部门名称为项目部时,出参返回该部门最高工资的人员的基本信息(10分); 3)出参返回内容及格式如下(15分): <Info> <EID>A00001</EID> <ENAME>SMITH</ENAME> <BDATE>SMITH</BDATE> <SEX>男</SEX> <CITY>上海</CITY> <SALARY>5000</SALARY> </Info> (3)存储函数要求实现如下功能:性别为F时返回男,性别为M时返回女,且存储函数必须在存储过程中使用(10分)。
时间: 2023-08-17 09:15:56 浏览: 88
好的,根据您的要求,我可以给出如下存储过程和存储函数的示例代码:
```sql
-- 存储函数,用于将性别 F 转换为男,M 转换为女
CREATE FUNCTION fn_convert_gender(gender CHAR(1))
RETURNS CHAR(1)
BEGIN
IF gender = 'F' THEN
RETURN '男';
ELSEIF gender = 'M' THEN
RETURN '女';
END IF;
END;
-- 存储过程,根据入参部门名称返回对应部门最低/最高工资的员工基本信息
-- 出参为 XML 格式,包含 EID、ENAME、BDATE、SEX、CITY、SALARY
CREATE PROCEDURE get_dept_salary_info(IN dept_name VARCHAR(20), OUT result_xml TEXT)
BEGIN
DECLARE min_salary DECIMAL(10, 2);
DECLARE max_salary DECIMAL(10, 2);
DECLARE emp_eid CHAR(6);
DECLARE emp_ename VARCHAR(50);
DECLARE emp_bdate DATE;
DECLARE emp_gender CHAR(1);
DECLARE emp_city VARCHAR(20);
DECLARE emp_salary DECIMAL(10, 2);
DECLARE result_str TEXT;
-- 根据部门名称获取最低/最高工资
IF dept_name = '研发部' THEN
SELECT MIN(salary) INTO min_salary FROM employee WHERE dept_name = '研发部';
ELSEIF dept_name = '项目部' THEN
SELECT MAX(salary) INTO max_salary FROM employee WHERE dept_name = '项目部';
ELSE
SET result_xml = NULL;
RETURN;
END IF;
-- 根据最低/最高工资获取员工信息
IF min_salary IS NOT NULL THEN
SELECT EID, ENAME, BDATE, GENDER, CITY, SALARY
INTO emp_eid, emp_ename, emp_bdate, emp_gender, emp_city, emp_salary
FROM employee
WHERE dept_name = dept_name AND salary = min_salary;
ELSEIF max_salary IS NOT NULL THEN
SELECT EID, ENAME, BDATE, GENDER, CITY, SALARY
INTO emp_eid, emp_ename, emp_bdate, emp_gender, emp_city, emp_salary
FROM employee
WHERE dept_name = dept_name AND salary = max_salary;
ELSE
SET result_xml = NULL;
RETURN;
END IF;
-- 构造 XML 格式的出参
SET result_str = CONCAT('<Info><EID>', emp_eid, '</EID><ENAME>', emp_ename, '</ENAME><BDATE>', emp_bdate, '</BDATE><SEX>', fn_convert_gender(emp_gender), '</SEX><CITY>', emp_city, '</CITY><SALARY>', emp_salary, '</SALARY></Info>');
SET result_xml = result_str;
END;
```
通过调用 `get_dept_salary_info` 存储过程并传入部门名称参数,即可获取对应部门最低/最高工资的员工基本信息,出参为 XML 格式,具体格式和内容如您所要求的示例。存储过程中使用了存储函数 `fn_convert_gender` 将员工性别转换为中文,满足了您的要求。
阅读全文