我想要一个接收salary值和job_id的函数。此函数需要验证作为参数传递的salary值是否介于最大和最小salary之间。
CREATE FUNCTION check(revenue Number, id integer)
RETURN message
IS message varchar2;
BEGIN
select min(revenue), max(revenue) from users;
RETURN(message);
END;
除非message
是一个数据类型(可能不是(,否则不能返回它。您要返回的是字符串-varcahr2
数据类型。
因此:
SQL> create or replace function f_test (salary in number)
2 return varchar2
3 is
4 l_min number;
5 l_max number;
6 begin
7 select min(sal), max(sal)
8 into l_min, l_max
9 from emp;
10
11 return case when salary between l_min and l_max then 'Between'
12 when salary > l_max then 'Above max'
13 else 'Other'
14 end;
15 end;
16 /
Function created.
SQL> select f_test(6000) result from dual;
RESULT
-------------------------------------------------------------------------------
Above max
SQL>
请随意改进(通过增加工作、部门等等(。
您可以通过使用分析函数创建一个函数,而无需返回极值的局部变量作为选项:
CREATE OR REPLACE FUNCTION verifyIfSalaryIsBetweenMinAndMaxForThatJob(i_salary NUMBER,
i_jobId INT)
RETURN VARCHAR2 IS
message VARCHAR2(50);
BEGIN
SELECT MAX(CASE WHEN i_salary < min_sal THEN
'Below'
WHEN i_salary > max_sal THEN
'Above Max'
WHEN i_salary BETWEEN min_sal AND max_sal THEN
'Between'
END)
INTO message
FROM
(
SELECT MIN(salary) OVER (PARTITION BY job_Id) AS min_sal,
MAX(salary) OVER (PARTITION BY job_Id) AS max_sal,
e.*
FROM employees e
)
WHERE job_id = i_jobId;
RETURN message;
END;
/
演示