【发布时间】:2015-05-07 20:57:18
【问题描述】:
CREATE TABLE STUDENTMARK
(
STUD_ROLLNO NUMBER(10),
CLASS_NAME VARCHAR2(10),
MARK1 NUMBER(5),
MARK2 NUMBER(5),
TOTAL NUMBER(5)
);
A) 编写一个 PL/SQL 触发器来更新“studentMark”表中的总数 当插入发生在同一个表中时。 查询:
CREATE VIEW STUDENTMARK_VIEW
AS SELECT * FROM STUDENTMARK;
CREATE OR REPLACE TRIGGER TOTAL_TRIG INSTEAD OF INSERT ON STUDENTMARK_VIEW
FOR EACH ROW
BEGIN
INSERT INTO STUDENTMARK (STUD_ROLLNO,CLASS_NAME,MARK1,MARK2)
VALUES (:NEW.STUD_ROLLNO,:NEW.CLASS_NAME,:NEW.MARK1,:NEW.MARK2);
UPDATE STUDENTMARK SET TOTAL = :new.mark1+:new.mark2
WHERE stud_rollno = :new.STUD_ROLLNO;
END;
/
truncate table studentmark;
INSERT INTO STUDENTMARK (STUD_ROLLNO,CLASS_NAME,MARK1,MARK2)
VALUES (1,'CSE_B',100,100);
SELECT * FROM STUDENTMARK;
我试过很多次。它正在插入 mark1 和 mark2 的值,但不更新总数 - 有什么错误?
【问题讨论】:
-
您的触发器在 STUDENTMARK_VIEW 上!如果您希望在 STUDENTMARK 表中插入记录时调用触发器,则必须在 STUDENTMARK 表中定义触发器!
标签: sql database triggers oracle11g