-- 1. Создаем таблицу dyuldin_m_employees (если она не существует)
CREATE TABLE dyuldin_m_employees (
empId NUMBER PRIMARY KEY, -- Номер сотрудника
name VARCHAR2(15) NOT NULL, -- Фамилия
dept VARCHAR2(10) NOT NULL, -- Отдел
mgr NUMBER -- Начальник (ссылка на empId)
);
-- 2. Создаем таблицу dyuldin_m для записи подчиненных
CREATE TABLE dyuldin_m (
empno NUMBER, -- Номер подчиненного
ename VARCHAR2(15) -- Фамилия подчиненного
);
-- 3. Добавляем тестовые данные
INSERT INTO dyuldin_m_employees VALUES (1, 'Clark', 'Sales', NULL); -- Руководитель
INSERT INTO dyuldin_m_employees VALUES (2, 'Dave', 'Accounting', 1); -- Подчиненный Clark
INSERT INTO dyuldin_m_employees VALUES (3, 'Ava', 'Sales', 1); -- Подчиненный Clark
-- 4. Создаем триггер
CREATE OR REPLACE TRIGGER dyuldin_m_trigger
BEFORE DELETE ON dyuldin_m_employees -- Убедитесь, что таблица существует!
FOR EACH ROW
BEGIN
-- Вставляем подчиненных в dyuldin_m
INSERT INTO dyuldin_m (empno, ename)
SELECT empId, name
FROM dyuldin_m_employees
WHERE mgr = :OLD.empId; -- Ищем подчиненных удаляемого сотрудника
EXCEPTION
WHEN OTHERS THEN
RAISE; -- Для отладки: выводим ошибку
END dyuldin_m_trigger;
/
-- Тестируем триггер
DELETE FROM dyuldin_m_employees WHERE empId = 1; -- Удаляем Clark
SELECT * FROM dyuldin_m; -- Результат: 2, Dave и 3, Ava