在SC表上创建一个instead of类型的触发器,触发器名称为:tri__Insert_SC。实现:当向表SC插入记录时检查分数的合理性,分数必须在0到100之间,如果不合理就拒绝插入,并给出信息提示
时间: 2024-05-12 07:13:23 浏览: 16
在 Oracle 数据库中创建一个 INSTEAD OF 触发器,可以使用以下 SQL 语句:
```sql
CREATE OR REPLACE TRIGGER tri_Insert_SC
INSTEAD OF INSERT ON SC
FOR EACH ROW
DECLARE
score NUMBER;
BEGIN
-- 获取插入记录的分数值
score := :new.score;
-- 检查分数值是否合法,如果不合法则拒绝插入并提示错误信息
IF score < 0 OR score > 100 THEN
RAISE_APPLICATION_ERROR(-20001, '分数必须在0到100之间');
ELSE
-- 如果分数值合法,则执行插入操作
INSERT INTO SC (sno, cno, score) VALUES (:new.sno, :new.cno, score);
END IF;
END;
/
```
这个触发器会在向表 SC 插入记录时触发,对插入的记录进行处理。首先获取插入记录的分数值,然后检查分数值是否在 0 到 100 之间,如果不在范围内,则抛出异常并提示错误信息;如果在范围内,则执行插入操作。注意,这里使用 RAISE_APPLICATION_ERROR 函数抛出一个应用程序错误,错误码为 -20001,这是 Oracle 中预定义的一个错误码,可以自定义错误信息。
相关问题
创建JXGL数据库表S的插入触发器tri_INSERT_S
好的,我可以为您提供创建JXGL数据库表S的插入触发器tri_INSERT_S的SQL语句,请参考以下代码:
```
CREATE TRIGGER tri_INSERT_S
ON S
AFTER INSERT
AS
BEGIN
DECLARE @sid CHAR(8), @sname VARCHAR(20), @sage INT, @ssex CHAR(2)
SELECT @sid = i.sid, @sname = i.sname, @sage = i.sage, @ssex = i.ssex
FROM inserted i
INSERT INTO Log_S(sid, sname, sage, ssex, operation)
VALUES (@sid, @sname, @sage, @ssex, 'INSERT')
END
```
这个触发器会在向表S中插入新行后自动执行,将新行的sid、sname、sage、ssex插入到Log_S表中,并在operation列中记录对表S的操作为“INSERT”。
请注意,这只是一个简单的示例触发器,您可能需要根据您的具体需求进行修改。
创建触发器 tri _ delete _ stu ,当在 Stu 表中删除一个学生时, sc 表中该生的选课记录也一并被删除。
可以使用以下代码创建触发器 tri_delete_stu:
```
CREATE TRIGGER tri_delete_stu
AFTER DELETE ON Stu
FOR EACH ROW
BEGIN
DELETE FROM sc WHERE sc.sno = OLD.sno;
END;
```
这个触发器会在 Stu 表中删除一条记录时被触发,然后删除 sc 表中所有与被删除学生相关的选课记录。其中,OLD.sno 表示被删除的学生的学号。