Triggers 触发器编译错误(插入)
这是我的代码:Triggers 触发器编译错误(插入),triggers,insert,compiler-errors,oracle11g,Triggers,Insert,Compiler Errors,Oracle11g,这是我的代码: create or replace trigger th after insert on stock for each row declare sqty number; rl number; isb number; rq number; begin set sqty=(select stockqty from inserted); set rl=(select reorderlevel from inserted); set
create or replace trigger th
after insert on stock
for each row
declare
sqty number;
rl number;
isb number;
rq number;
begin
set sqty=(select stockqty from inserted);
set rl=(select reorderlevel from inserted);
set isb=(select isbn from inserted);
set rq=(select reorderquantity from inserted);
go
if sqty> rl then
delete from stock where isb=isbn;
insert into stock values(isb,sqty,rl,rq);
end if;
end;
问题:
1.如果使用插入后触发器,则意味着所有这些都是在插入后发生的,对吗?如果我不想插入特定数据,该怎么办?我的意思是,如果权重我无法理解您试图执行的操作,但您的语法都错了(您从哪里获得的?SQL Server?)。有关正确的语法,请参阅 你写道:
set sqty=(select stockqty from inserted);
我怀疑你想这样做:
sqty := :new.stockqty;
接下来的3行也是如此
那么你有:
go
if sqty> rl then
delete from stock where isb=isbn;
insert into stock values(isb,sqty,rl,rq);
end if;
这是胡说八道。把它拿走
那么你有:
go
if sqty> rl then
delete from stock where isb=isbn;
insert into stock values(isb,sqty,rl,rq);
end if;
这似乎意味着,如果插入行的stockqty超过其reordlevel,则将其删除,然后将其重新插入。这毫无意义,并且不能使用FOR-EACH行触发器来完成,因为您将得到“table is mutating”错误
请解释您试图实现的目标,然后我们可以帮助您看看是否能够实现。答案:1.您可以使用一个 2.我不明白你的意思:
如果要查找重复记录,则可以按所有字段分组并使用
having count(*) >0
但是为什么要使用触发器呢?或者你的意思是你想要触发器中的值?如果是,请使用
Oracle触发器必须用PL/SQL编写,而PL/SQL没有您试图使用的“set”和“go”命令。