Так как это очень похоже на домашнюю работу, вот примерное руководство, и вам нужно заполнить пробелы:
Первая часть вашего вопроса:
Создайте функцию GET_EMPLOYEE_SUMMARY
, поэтому вам не следует начинать с написания запроса SQL, а писать оператор PL / SQL:
CREATE FUNCTION GET_EMPLOYEE_SUMMARY ...
You можно посмотреть полный синтаксис в документации Oracle .
, которая получает идентификатор сотрудника
Таким образом, один из аргументов функции должно быть что-то вроде:
i_employee_id IN EMPLOYEE.EMPLOYEE_ID%TYPE
и через выходной параметр возвращает структуру данных со следующей информацией ...
Таким образом, ваш тип возвращаемого значения должен быть пользовательским типом , созданным с помощью оператора вроде:
CREATE TYPE <your_type_name> AS OBJECT(
<list_of_properties _and_data_types>
)
, и затем вы можете использовать этот тип возврата в объявлении функции.
Когда дело доходит до записи PL / SQL блок для вашей функции, тогда вы можете включить ваш запрос, который должен выглядеть примерно так г как:
CREATE FUNCTION <your_function_signature>
IS
<declare your local variables>
BEGIN
SELECT E.FIRST_NAME,
E.LAST_NAME,
M.FIRST_NAME || ' ' || M.LAST_NAME
D.DEPARTMENT_NAME
INTO <your_first_name_variable>,
<your_last_name_variable>,
<your_manager_name_variable>,
<your_department_name_variable>
FROM EMPLOYEES E
LEFT OUTER JOIN EMPLOYEES M
ON ( E.MANAGER_ID = M.EMPLOYEE_ID )
INNER JOIN DEPARTMENTS D
ON ( D.DEPARTMENT_ID = E.DEPARTMENT_ID )
WHERE E.EMPLOYEE_ID = i_employee_id;
<do stuff>
RETURN <your_custom_type>
EXCEPTION
WHEN NO_DATA_FOUND THEN
<handle the exception>
END;
/