oralce中创建一个insert触发器,当在sc表中插入一条新记录时,sno和cno必须是已经存在的学号和课程号,且grade应该在0----100之间。
时间: 2023-11-22 08:55:27 浏览: 129
你可以使用如下的SQL语句在Oracle中创建一个Insert触发器:
```
CREATE OR REPLACE TRIGGER trg_insert_sc
BEFORE INSERT ON sc
FOR EACH ROW
DECLARE
v_sno sc.sno%TYPE;
v_cno sc.cno%TYPE;
BEGIN
SELECT COUNT(*) INTO v_sno FROM student WHERE sno = :NEW.sno;
SELECT COUNT(*) INTO v_cno FROM course WHERE cno = :NEW.cno;
IF v_sno = 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'Sno does not exist!');
END IF;
IF v_cno = 0 THEN
RAISE_APPLICATION_ERROR(-20002, 'Cno does not exist!');
END IF;
IF :NEW.grade < 0 OR :NEW.grade > 100 THEN
RAISE_APPLICATION_ERROR(-20003, 'Grade must be between 0 and 100!');
END IF;
END;
/
```
这个触发器会在每次向sc表中插入新记录之前执行。它首先检查sno和cno是否已经存在于student和course表中,如果不存在则抛出异常。然后,它检查grade是否在0和100之间,如果不是,则同样抛出异常。
阅读全文