带大小写的SQL语句

问题描述

我想要一个接收薪水值和job_id的函数。此功能需要验证作为参数传递的薪水值是否在最高薪水和最低薪水之间。

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;
/

Demo