after insert or update or delete on RECORDS for each row declare begin if inserting then UPDATE books set "库存量"="库存量"-1 where "书籍编号"=:new."书籍编号"; elsif deleting then UPDATE books set "库存量"="库存量"+1 where "书籍编号"=:old."书籍编号"; end if; end;有什么问题
时间: 2023-08-07 08:12:16 浏览: 163
从语法上看,这是一个有效的 PL/SQL 代码块,该代码块是在记录表上创建的触发器。当插入、更新或删除记录时,触发器将执行相应的操作,更新书籍表中的库存量。
但是,无法确定是否存在其他问题,例如:
- 触发器是否正常工作?您是否测试过触发器并确保它按预期工作?
- 您的数据模型是否正确?库存量是否正确地更新?
如果您遇到问题,请提供更多上下文信息和错误消息,以便我可以更好地帮助您。
相关问题
触发器 在学生表中删除学生的同时删除选课表的信息 CREATE TRIGGER students_delete_before BEFORM DELETE ON students FOR EACH ROW BEGIN DELETE FROM sc WHERE Sno=old.Sno; END; 更新选课表信息 CREATE TRIGGER students_update_after AFTER UPDATE ON students FOR EACH ROW BEGIN UPDATE sc SET Sno=new.Sno WHERE Sno=old.Sno; END; 学分录入(成绩大于60) CREATE TRIGGER sc_install_after AFTER UPDATE ON sc FOR EACH ROW BEGIN DECLARE xf SAMLLINT; SELECT Ccredit INTO xf FORM course WHERE Cno=new.Cno; IF new.Grade>=60 THEN UPDATE students SET Scredit+xf WHERE Sno=new.Sno; END IF; END;这段代码找出错误并改正
在第三个触发器中,声明变量的语句中 "SAMLLINT" 应该为 "SMALLINT"。同时,在更新语句后面应该加上 SET 关键字,将修改后的学分值赋值给 Scredit 字段。修改后的代码如下:
```
CREATE TRIGGER sc_install_after AFTER UPDATE ON sc FOR EACH ROW
BEGIN
DECLARE xf SMALLINT;
SELECT Ccredit INTO xf FROM course WHERE Cno=new.Cno;
IF new.Grade >= 60 THEN
UPDATE students SET Scredit = Scredit + xf WHERE Sno = new.Sno;
END IF;
END;
```
create or replace trigger tg_java5_backup after --执行sql之后执行--before是事前触发器,after是事后触发器 insert or update or delete --增、删、改都触发 on java5 for each row--行级触发器 declare begin if inserting then insert into java5_back(id,name,gz)values(:new.id,:new.name,:new.gz); elsif updating then update java5_back set id=:new.id,name=:new.name,gz=:new.gz; elsif deleting then delete from java5_back where id=old.id; end if; exception when others then raise_application_error(-20003, '备份失败'); end;
这是一个用于在执行SQL操作后触发的触发器。它可以在插入、更新或删除数据时备份相关数据到另一个表中。具体的代码如下:
```sql
create or replace trigger tg_java5_backup
after insert or update or delete on java5
for each row
declare
begin
if inserting then
insert into java5_back(id, name, gz) values (:new.id, :new.name, :new.gz);
elsif updating then
update java5_back set id = :new.id, name = :new.name, gz = :new.gz;
elsif deleting then
delete from java5_back where id = :old.id;
end if;
exception
when others then
raise_application_error(-20003, '备份失败');
end;
```
这个触发器会在java5表的每一行数据被插入、更新或删除后执行相应的备份操作。如果备份过程中出现异常,会抛出一个应用错误。
阅读全文