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 17:12:16 浏览: 43
从语法上看,这是一个有效的 PL/SQL 代码块,该代码块是在记录表上创建的触发器。当插入、更新或删除记录时,触发器将执行相应的操作,更新书籍表中的库存量。
但是,无法确定是否存在其他问题,例如:
- 触发器是否正常工作?您是否测试过触发器并确保它按预期工作?
- 您的数据模型是否正确?库存量是否正确地更新?
如果您遇到问题,请提供更多上下文信息和错误消息,以便我可以更好地帮助您。
相关问题
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表的每一行数据被插入、更新或删除后执行相应的备份操作。如果备份过程中出现异常,会抛出一个应用错误。
create or replace trigger use_table after insert on open_table for each row declare PRAGMA AUTONOMOUS_TRANSACTION; begin update desk set state = '占用中' where desk_number = :new.desk_number; commit; end; /
根据您提供的代码,这是一个 Oracle 数据库的触发器,它的作用是在 `open_table` 表中插入新数据后,自动将 `desk` 表中对应的 `desk_number` 的 `state` 字段更新为 `'占用中'`。
您的问题是 "发生了变化,触发器不能读它",这句话比较模糊,不太清楚您的具体意思。如果您能提供更多的上下文或信息,我会尽力帮助您解决问题。