Главная / Введение в модель данных SQL / Предположим, что в базе данных поддерживаются две специальные 'аудиторские' таблицы AUDIT1 и AUDIT2 следующей структуры: [таблица] [таблица] В таблице AUDIT1 фиксируются все события, соответствующие изменению зарплаты служащих. В столбце EVENT_TS сохраняе

Предположим, что в базе данных поддерживаются две специальные “аудиторские” таблицы AUDIT1 и AUDIT2 следующей структуры:

AUDIT1
EMP_NO
EVENT_TS
OLD_SAL
OLD_BONUS
NEW_SAL
NEW_BONUS
AUDIT2
DEPT_NO
EVENT_TS
AVG_DEPT_SAL
AVG_DEPT_BONUS

В таблице AUDIT1 фиксируются все события, соответствующие изменению зарплаты служащих. В столбце EVENT_TS сохраняется временная метка соответствующего события. В таблице AUDIT2 регистрируются события, связанные с такими обновлениями данных о сотрудниках, при которых среднее значение зарплаты или премиальных некоторого отдела становится меньше среднего значения зарплаты или премиальных служащих, участвующих в некотором проекте, в котором принимает участие и хотя бы один сотрудник данного отдела. В столбце EVENT_TS таблицы AUDIT2 сохраняется временная метка соответствующего события, а в столбцах AVG_DEPT_SAL и AVG_DEPT_BONUS – соответствующие “критические” средние значения.

Какие из приводимых ниже определений триггеров обеспечат требуемую функциональность?

вопрос

Правильный ответ:

CREATE TRIGGER EMP_INSERT AFTER INSERT ON EMP REFERENCING NEW ROW AS NEW_EMP FOR EACH ROW INSERT INTO AUDIT1 ROW (NEW_EMP.EMP_NO, CURRENT_TIMESTAMP, 0, 0, NEW_EMP.EMP_SAL, NEW_EMP.EMP_BONUS); CREATE TRIGGER EMP_UPDATE AFTER UPDATE OF EMP_SAL, EMP_BONUS ON EMP REFERENCING OLD ROW AS OLD_EMP NEW ROW AS NEW_EMP FOR EACH ROW INSERT INTO AUDIT1 ROW (NEW_EMP.EMP_NO, CURRENT_TIMESTAMP, OLD_EMP.EMP_SAL, OLD_EMP.EMP_BONUS, NEW_EMP.EMP_SAL, NEW_EMP.EMP_BONUS); CREATE TRIGGER EMP_DELETE AFTER DELETE ON EMP REFERENCING OLD ROW AS OLD_EMP FOR EACH ROW INSERT INTO AUDIT1 ROW (OLD_EMP.EMP_NO, CURRENT_TIMESTAMP, OLD_EMP.EMP_SAL, OLD_EMP.EMP_BONUS, 0, 0); CREATE TRIGGER EMP_INSERT1 AFTER INSERT ON EMP INSERT INTO AUDIT2 (SELECT DISTINCT NE.DEPT_NO, CURRENT_TIMESTAMP, AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) FROM EMP NE WHERE NE.DEPT_NO = NEW_EMP.DEPT_NO GROUP BY NE.DEPT_NO HAVING AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) < (SELECT AVG (NE1.EMP_SAL), AVG (NE1.EMP_BONUS) FROM EMP NE1 WHERE NE.PRO_NO = NE1.PRO_NO)); CREATE TRIGGER EMP_UPDATE1 AFTER UPDATE OF EMP_SAL, EMP_BONUS ON EMP INSERT INTO AUDIT2 (SELECT DISTINCT NE.DEPT_NO, CURRENT_TIMESTAMP, AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) FROM NEW_EMP NE WHERE NE.DEPT_NO = NEW_EMP.DEPT_NO GROUP BY NE.DEPT_NO HAVING AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) < (SELECT AVG (NE1.EMP_SAL), AVG (NE1.EMP_BONUS) FROM NEW_EMP NE1 WHERE NE.PRO_NO = NE1.PRO_NO)); CREATE TRIGGER EMP_DELETE1 AFTER DELETE ON EMP INSERT INTO AUDIT2 (SELECT DISTINCT NE.DEPT_NO, CURRENT_TIMESTAMP, AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) FROM NEW_EMP NE WHERE NE.DEPT_NO = NEW_EMP.DEPT_NO GROUP BY NE.DEPT_NO HAVING AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) < (SELECT AVG (NE1.EMP_SAL), AVG (NE1.EMP_BONUS) FROM NEW_EMP NE1 WHERE NE.PRO_NO = NE1.PRO_NO));
CREATE TRIGGER EMP_INSERT AFTER INSERT ON EMP REFERENCING NEW ROW AS NEW_EMP FOR EACH ROW BEGIN ATOMIC INSERT INTO AUDIT1 ROW (NEW_EMP.EMP_NO, CURRENT_TIMESTAMP, 0, 0, NEW_EMP.EMP_SAL, NEW_EMP.EMP_BONUS); INSERT INTO AUDIT2 (SELECT DISTINCT NE.DEPT_NO, CURRENT_TIMESTAMP, AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) FROM EMP NE WHERE NE.DEPT_NO = NEW_EMP.DEPT_NO GROUP BY NE.DEPT_NO HAVING AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) < (SELECT AVG (NE1.EMP_SAL), AVG (NE1.EMP_BONUS) FROM EMP NE1 WHERE NE.PRO_NO = NE1.PRO_NO)); END; CREATE TRIGGER EMP_UPDATE AFTER UPDATE OF EMP_SAL, EMP_BONUS ON EMP REFERENCING OLD ROW AS OLD_EMP NEW ROW AS NEW_EMP FOR EACH ROW BEGIN ATOMIC INSERT INTO AUDIT1 ROW (NEW_EMP.EMP_NO, CURRENT_TIMESTAMP, OLD_EMP.EMP_SAL, OLD_EMP.EMP_BONUS, NEW_EMP.EMP_SAL, NEW_EMP.EMP_BONUS); INSERT INTO AUDIT2 (SELECT DISTINCT NE.DEPT_NO, CURRENT_TIMESTAMP, AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) FROM EMP NE WHERE NE.DEPT_NO = NEW_EMP.DEPT_NO GROUP BY NE.DEPT_NO HAVING AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) < (SELECT AVG (NE1.EMP_SAL), AVG (NE1.EMP_BONUS) FROM EMP NE1 WHERE NE.PRO_NO = NE1.PRO_NO)); END; CREATE TRIGGER EMP_DELETE AFTER DELETE ON EMP REFERENCING OLD ROW AS OLD_EMP FOR EACH ROW BEGIN ATOMIC BEGIN ATOMIC INSERT INTO AUDIT1 ROW (OLD_EMP.EMP_NO, CURRENT_TIMESTAMP, OLD_EMP.EMP_SAL, OLD_EMP.EMP_BONUS, 0, 0); INSERT INTO AUDIT2 (SELECT DISTINCT NE.DEPT_NO, CURRENT_TIMESTAMP, AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) FROM EMP NE WHERE NE.DEPT_NO = NEW_EMP.DEPT_NO GROUP BY NE.DEPT_NO HAVING AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) < (SELECT AVG (NE1.EMP_SAL), AVG (NE1.EMP_BONUS) FROM EMP NE1 WHERE NE.PRO_NO = NE1.PRO_NO)); END;
CREATE TRIGGER EMP_UPDATE AFTER ON EMP REFERENCING OLD ROW AS OLD_EMP NEW ROW AS NEW_EMP FOR EACH ROW BEGIN ATOMIC INSERT INTO AUDIT1 ROW (NEW_EMP.EMP_NO, CURRENT_TIMESTAMP, OLD_EMP.EMP_SAL, OLD_EMP.EMP_BONUS, NEW_EMP.EMP_SAL, NEW_EMP.EMP_BONUS); INSERT INTO AUDIT2 (SELECT DISTINCT NE.DEPT_NO, CURRENT_TIMESTAMP, AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) FROM EMP NE WHERE NE.DEPT_NO = NEW_EMP.DEPT_NO GROUP BY NE.DEPT_NO HAVING AVG (NE.EMP_SAL), AVG (NE.EMP_BONUS) < (SELECT AVG (NE1.EMP_SAL), AVG (NE1.EMP_BONUS) FROM EMP NE1 WHERE NE.PRO_NO = NE1.PRO_NO)); END;
Сложность вопроса
65
Сложность курса: Введение в модель данных SQL
81
Оценить вопрос
Очень сложно
Сложно
Средне
Легко
Очень легко
Комментарии:
Аноним
Какой человек ищет вот эти тесты inuit? Это же крайне просто
27 мар 2020
Аноним
спасибо
11 ноя 2019
Оставить комментарий
Другие ответы на вопросы из темы базы данных интуит.