Как использовать функцию GROUP (MAX) в функции? - PullRequest
0 голосов
/ 18 декабря 2018
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" при ожидании одного из следующих действий: начало функция прагма тип процедуры подтип текущий курсор существует ранее

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Вам нужен оператор 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;
0 голосов
/ 18 декабря 2018

Просто используйте подзапрос для сравнения максимальной заработной платы, ваш код должен выглядеть следующим образом:

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 
0 голосов
/ 18 декабря 2018

Пожалуйста, проверьте код ниже, у вас были как синтаксические, так и логические ошибки.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...