HR SCHEMA ORACLE - PullRequest
       0

HR SCHEMA ORACLE

0 голосов
/ 17 февраля 2020

HR SCHEMA ORACLE

Создать функцию «GET_EMPLOYEE_SUMMARY», которая получает идентификатор сотрудника и через выходной параметр возвращает структуру данных со следующей информацией: - идентификатор сотрудника - имя - фамилия - Имя менеджера - Название отдела

Итак, имя менеджера основано на идентификатор сотрудника ..

Запрос:

select  

      e.first_name as first_name,
      e.last_name,
      e.employee_id,
      e.manager_id as Name,
      d.department_name

      from employees e 
      Cross join departments d 

, но у меня есть некоторые ошибки ... idk

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Так как это очень похоже на домашнюю работу, вот примерное руководство, и вам нужно заполнить пробелы:

Первая часть вашего вопроса:

Создайте функцию 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;
/
0 голосов
/ 17 февраля 2020

Вам просто нужно снова выполнить самостоятельное соединение с таблицей EMPLOYEE, а соединение с таблицей DEPARTMENT должно быть внутренним.

Необходимо что-то вроде следующего:

SELECT
    E.FIRST_NAME   AS FIRST_NAME,
    E.LAST_NAME,
    E.EMPLOYEE_ID,
    M.FIRST_NAME || M.LAST_NAME   AS MANAGER_NAME, -- Change it according to your requirement
    D.DEPARTMENT_NAME
FROM
    EMPLOYEES E
    JOIN EMPLOYEES M ON E.MANAGER_ID = M.EMPLOYEE_ID
    JOIN DEPARTMENTS D ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
WHERE
    E.EMPLOYEE_ID = 100;

Cheers !!

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