Соединение двух таблиц в PL / SQL и получение требуемого результата - PullRequest
0 голосов
/ 19 января 2020

Структура двух таблиц в базе данных приведена ниже.

1) Таблица отделов: первичный ключ с номером Dept_Id (5), Sept_Name varchar2 (20), с номером Employee_strength (4) не ноль.

2) Таблица сотрудников: E_Id номер (5), E_Name varchar2 (20), Обозначение varchar2 (20), D_ID номер (5) ссылки Таблица отдела Dept_ID.

A pl / sql программный блок для печати названия должны быть записаны отделы, в которых есть сотрудники, имеющие обозначение «SE», и если в таблице отделов нет записи, удовлетворяющей заданным условиям, код должен напечатать сообщение «Запись не найдена», и если запись обнаружила код должен напечатать название отдела.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 19 января 2020

Вот один вариант (на основе таблиц, похожих на вашу; они принадлежат Скотту).

Я буду искать ПРОДАЖА .

SQL> break on deptno
SQL> select distinct d.deptno, e.job
  2  from dept d left join emp e on e.deptno = d.deptno
  3  order by d.deptno, e.job;

    DEPTNO JOB
---------- ---------
        10 CLERK
           MANAGER
           PRESIDENT
        20 ANALYST
           CLERK
           MANAGER
        30 CLERK
           MANAGER
           SALESMAN        --> only department 30 has SALESMEN
        40

10 rows selected.

SQL>

PL / SQL блок:

SQL> set serveroutput on
SQL> declare
  2    l_exists number(1);
  3  begin
  4    for cur_d in (select d.deptno, d.dname from dept d order by d.deptno) loop
  5      select max(1)
  6        into l_exists
  7        from emp e
  8        where e.deptno = cur_d.deptno
  9          and e.job = 'SALESMAN';
 10
 11      dbms_output.put_line(cur_d.deptno || ' - ' ||
 12                           case when l_exists = 1 then cur_d.dname
 13                                else  'no record found'
 14                           end);
 15    end loop;
 16  end;
 17  /
10 - no record found
20 - no record found
30 - SALES
40 - no record found

PL/SQL procedure successfully completed.

SQL>
...