【发布时间】:2020-12-08 09:23:35
【问题描述】:
这些是表格:
CREATE TABLE Staff
(
staffID INTEGER,
staffName VARCHAR(20),
staffSurname VARCHAR(20),
DOB DATE NOT NULL,
staffBranchNo INTEGER,
salary DECIMAL(5,2),
startDateOfWork DATE
);
ALTER TABLE Staff
ADD (CONSTRAINT staff_pk PRIMARY KEY(staffID));
CREATE TABLE Branch
(
branchNo INTEGER,
branchCity varchar(20),
branchTotalStaffNumber INTEGER
);
ALTER TABLE Branch
ADD (CONSTRAINT branch_pk PRIMARY KEY(branchNo));
我需要一个根据staffBranchNo更新branchTotalStaffNumber的触发器,当添加新员工时,会更新或删除现有员工。
我尝试了一些触发器,但没有一个包含我需要的其中三个操作。 下面的触发器不起作用。
CREATE OR REPLACE TRIGGER staff_trigger
BEFORE INSERT OR UPDATE OR DELETE ON Staff
FOR EACH ROW
BEGIN
CASE
WHEN INSERTING THEN
INSERT INTO branch (branchTotalStaffNumber)
VALUES(:NEW.branchTotalStaffNumber);
WHEN UPDATING THEN
UPDATE branch SET branchTotalStaffNumber = :NEW.branchTotalStaffNumber;
WHEN DELETING THEN
delete from branch where staffBranchNo = :new.branchTotalStaffNumber;
END CASE;
END;
/
【问题讨论】:
-
请向我们展示您到目前为止所尝试的方法,并解释哪些方法不起作用。
-
我编辑了问题@GMB
-
这不是一个好方法。不要在数据库中存储根据其他数据计算的值(例如,每个分支机构的员工人数)。这种计算属于视图,而不是存储表。如果您需要非常快速地访问这些数字,您可以使用物化视图。 (例如:如果您采用触发方式,您将如何计算创建或消除的分支?或合并?等等。)
标签: sql oracle oracle-sqldeveloper