【问题标题】:How to use GROUP function (MAX) in FUNCTION?如何在 FUNCTION 中使用 GROUP 函数(MAX)?
【发布时间】:2019-05-18 13:15:06
【问题描述】:
CREATE TABLE cursor_table(
emp_id NUMBER(10) PRIMARY KEY,
emp_name VARCHAR2(30),
emp_salary NUMBER(5)
);

INSERT INTO cursor_table VALUES(101,'addeesh',25000);
INSERT INTO cursor_table VALUES(102,'arunkumar',28000);
INSERT INTO cursor_table VALUES(103,'ashokkumar',35000);
INSERT INTO cursor_table VALUES(104,'durairaj',22000);


CREATE OR REPLACE FUNCTION high_payed_emp
RETURN NUMBER 
IS
    high_payed_emp_id NUMBER(10):=0;
    DECLARE max_emp_salary = MAX(emp_salary);
BEGIN
    SELECT emp_id INTO high_payed_emp_id
    FROM cursor_table
    WHERE emp_salary = max_emp_salary;

    RETURN high_payed_emp_id;
END;

我需要创建一个函数来查找薪酬最高的员工。

错误消息:遇到下列情况之一时遇到符号“DECLARE”:begin function pragma procedure subtype type current cursor delete exists prior

【问题讨论】:

  • 如果两个(或更多)员工的最高薪水相同,你想返回什么?

标签: sql database oracle function plsql


【解决方案1】:

您需要一条 SQL 语句才能使用 MAX 函数。

CREATE OR REPLACE FUNCTION high_payed_emp
RETURN NUMBER 
IS
    high_payed_emp_id NUMBER(10):=0;
     max_emp_salary NUMBER :=0;
BEGIN
    SELECT MAX(emp_salary) 
      INTO max_emp_salary 
      FROM cursor_table;

    SELECT emp_id INTO high_payed_emp_id
    FROM cursor_table
    WHERE emp_salary = max_emp_salary;

    RETURN high_payed_emp_id;
END;

【讨论】:

    【解决方案2】:

    请检查下面的代码,你有语法和逻辑错误。

    CREATE OR REPLACE FUNCTION high_payed_emp
    RETURN NUMBER 
    IS
        high_payed_emp_id NUMBER(10):=0;
    BEGIN
      select emp_id 
        into high_payed_emp_id  
      from (
        select emp_id 
        from cursor_Table
        order by emp_salary desc
      )
      where rownum = 1;
    
      RETURN high_payed_emp_id;
    END;
    

    【讨论】:

      【解决方案3】:

      只需使用子查询比较最高工资,您的代码应该如下所示:

      CREATE OR REPLACE FUNCTION high_payed_emp
      RETURN NUMBER 
      IS
          high_payed_emp_id NUMBER(10);
      BEGIN
          SELECT emp_id INTO high_payed_emp_id
          FROM cursor_table
          WHERE emp_salary = (Select max(emp_salary) from cursor_table);
          RETURN high_payed_emp_id;
      END;
      

      执行:

      Select high_payed_emp from dual;
      

      输出:

      HIGH_PAYED_EMP
      --------------
                 103 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 2019-09-23
        • 2023-03-28
        • 1970-01-01
        • 2016-06-13
        • 1970-01-01
        相关资源
        最近更新 更多