我正在尝试创建一个触发器,为特定课程的学生插入一些成绩。
有两个表,成绩和课程,我在这些表上创建了一个视图,我想在该视图上创建一个触发器。
触发器必须执行以下操作:
我写这段代码:
CREATE OR REPLACE TRIGGER trig_notes_students INSTEAD OF
INSERT ON view_notes_students
FOR EACH ROW
BEGIN
DECLARE temp_var NUMBER(2) := 0;
BEGIN
SET temp_var = (SELECT count(course_id) FROM course_table WHERE course_table.course_id = :new.course_id);
IF temp_var = 1 THEN
INTO grades_table(grade_id, course_id, grade_value) VALUES (:new.grade_id,:new.course_id,:new.grade_value);
ELSE
INSERT INTO course_table(course_id, course_name) VALUES (:new.course_id, :new.course_name);
INSERT INTO grades_table(grade_id, course_id, grade_value) VALUES (:new.grade_id,:new.course_id,:new.grade_value);
END IF;
END;
END;
/
触发器已创建,但我在编译时收到此错误。
4/1 PL/SQL: SQL Statement ignored
4/5 PL/SQL: ORA-00922: missing or invalid option
答案 0 :(得分:1)
SET temp_var = (SELECT count(course_id) FROM course_table WHERE course_table.course_id = :new.course_id);
应该是
SELECT count(course_id) INTO temp_var FROM course_table WHERE course_table.course_id = :new.course_id;
答案 1 :(得分:0)
CREATE OR REPLACE TRIGGER trig_notes_students
INSTEAD OF INSERT ON view_notes_students
FOR EACH ROW
DECLARE
temp_var NUMBER(2);
BEGIN
SELECT count(course_id)
INTO temp_var
FROM course_table
WHERE course_table.course_id = :new.course_id;
INSERT INTO grades_table(grade_id, course_id, grade_value) VALUES (:new.grade_id,:new.course_id,:new.grade_value);
IF temp_var > 0 THEN
INSERT INTO course_table(course_id, course_name) VALUES (:new.course_id, :new.course_name);
END IF;
END;
/
SHOW ERRORS;