【发布时间】:2018-05-20 10:26:02
【问题描述】:
我在研究 Oracle 数据库的触发器时有一个问题。
首先,我创建了两个如下表:
**[Employee]**
(empno NUMBER, VARCHAR2 (20), deptno NUMBER, salary NUMBER)
**[Department]**
(deptno NUMBER, dname VARCHAR2 (20))
Employee deptno 指的是部门的deptno。
我要创建的触发器是用deptno计算数据的平均工资,比如inserted deptno。
例如,假设我运行以下代码。
INSERT INTO employee values (1000, 'PAUL', 10, 4000);
那么触发器想要有以下输出:
Department [10]'s average of Salary = <avg (salary)>
但我不知道如何在触发器中传递插入行的参数。
有人有什么好办法吗?
【问题讨论】:
-
我知道您只是在学习基础知识,但在创建任何触发器之前请三思,不要轻易创建它们。它们可能非常昂贵(以及其他陷阱)。例如,如果您在此表中有 1000 万行,您真的想在每次插入、更新或删除行时对所有行运行聚合函数吗?在大多数情况下,如果可以避免触发器,我会避免它。这绝对不是触发器的情况。
-
谢谢。我会熟悉你的建议。
-
这是来自Tom Kyte 的好读物,它解释了我谈到的陷阱的更多信息。
-
你是什么意思,“触发器将有以下输出”?输出到哪里,用于什么目的?