PL / SQL как вызвать эту функцию - PullRequest
0 голосов
/ 29 ноября 2018

Я создал запись, курсор и эту функцию, и я не знаю, как ее вызвать.Не могли бы вы помочь мне с этим?

DECLARE
TYPE EmpRecTyp IS RECORD (
 emp_id       NUMBER(6),
 salary       NUMBER(8,2));
CURSOR desc_salary RETURN EmpRecTyp IS
  SELECT employee_id, salary FROM employees ORDER BY salary DESC;
emp_rec     EmpRecTyp;
FUNCTION nth_highest_salary (n INTEGER) RETURN EmpRecTyp IS
BEGIN
  OPEN desc_salary;
  FOR i IN 1..n LOOP
     FETCH desc_salary INTO emp_rec;
  END LOOP;
  CLOSE desc_salary;
  RETURN emp_rec;
END nth_highest_salary;
BEGIN
  NULL;
END;
/

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Поскольку вы сделали функцию локальной для блока, вы можете вызывать ее только из этого блока.Я предлагаю, чтобы в приведенном выше коде вы заменили

BEGIN
  NULL;
END;

на

BEGIN
  emp_rec := nth_highest_salary(1);
END;

Удачи.

0 голосов
/ 30 ноября 2018
FUNCTION nth_highest_salary (n INTEGER) RETURN EmpRecTyp IS
TYPE EmpRecTyp IS RECORD (
 emp_id       NUMBER(6),
 salary       NUMBER(8,2));
CURSOR desc_salary RETURN EmpRecTyp IS
  SELECT employee_id, salary FROM employees ORDER BY salary DESC;
emp_rec     EmpRecTyp;
BEGIN
  OPEN desc_salary;
  FOR i IN 1..n LOOP
     FETCH desc_salary INTO emp_rec;
  END LOOP;
  CLOSE desc_salary;
  RETURN emp_rec;
END nth_highest_salary;
/

затем

SELECT nth_highest_salary (n) ОТ ДВОЙНОГО;

0 голосов
/ 30 ноября 2018

Просто объявите переменную EmpRecTyp, и вы сможете вызывать свою функцию следующим образом:

DECLARE 
  vl_emprectyp EmpRecTyp;
BEGIN
  vl_emprectyp := nth_highest_salary(1);
END;

Обратите внимание, что этот код будет работать только в области действия вашего блока pl / sql.

0 голосов
/ 29 ноября 2018

Вы проверяли это:

Begin
     emp_rec := nth_highest_salary(1);
End;

Дело в том, что если вы хотите использовать эту функцию глобально, вы должны также определить этот тип глобально.

Также в зависимости от вашей версии Oracleнужно инициализировать переменную записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...