缺少什么选项或无效?

时间:2016-02-25 22:07:10

标签: oracle plsql triggers

我正在尝试创建一个触发器,为特定课程的学生插入一些成绩。

有两个表,成绩和课程,我在这些表上创建了一个视图,我想在该视图上创建一个触发器。

触发器必须执行以下操作:

  • 如果课程中存在课程,则应仅在grade_table中插入成绩;
  • 如果course_table中不存在课程,则应插入grade_table和course_table特定值。

我写这段代码:

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

2 个答案:

答案 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;