在 Oracle sql 中创建触发器
Create trigger in oracle sql
我在 SQL 中创建了一个触发器,但我遇到了一个错误,我不知道我的代码有什么问题。我试图从其他问题中找到我的解决方案,但没有根据我的问题找到任何答案
我需要一个触发器来更改我的表变量的值,例如:我在一个名为 used_weight
的变量中有一个值 (200kg),当我在这个变量上插入、更新或删除时,该值应该像我的代码一样驱动。
编译错误如下
Warning: Trigger created with compilation errors
当我更新我的变量时,我得到的错误是
ERROR at line 1:
ORA-04098: trigger 'ALI.LEFT_BALANCE' is invalid and failed re-validation
这是我的代码:
create or replace trigger left_balance
before delete or insert or update on reels_table
for each row
declare
begin
user_weight:=:new.used_weight+:old.used_weight;
left_weight:=weight-used_weight;
end;
/
我声明了变量但错误仍然存在
create or replace trigger left_balance
before delete or insert or update on reels_table
for each row
declare
x number=:new.user_weight;
xx number=:old.user_weight;
begin
user_weight:=x+xx;
left_weight:=weight-user_weight;
end;
/
下面是一个简单的例子,但首先让我解释几件事:
在 plsql 代码中,当你想使用变量时,你必须声明它们(正如@sticky bit 解释的那样)。
示例:
declare var1 varchar2(10);
var1 varchar2(10);
您在 table reels_table1 上使用了触发器,这将导致突变错误,但是因为您使用了 before
,所以没有遇到错误。
正如@Daniel E 指出的那样,插入不会有旧值。
请注意,在下面的示例中,我创建了一个测试 table 并在更新中添加了一个条件,也许您会忘记它。
drop table reels_table1
/
create table reels_table1 (id number(4), user_weight number(4), left_weight number(4),weight number(4) )
/
create or replace trigger left_balance
before delete or insert or update on reels_table1
for each row
declare
x number(2) := :new.user_weight;
xx number (2) := :old.user_weight;
begin
update reels_table1 set
user_weight =x+xx where id =1;
update reels_table1 set left_weight = weight - user_weight where id=1;
end;
/
我在 SQL 中创建了一个触发器,但我遇到了一个错误,我不知道我的代码有什么问题。我试图从其他问题中找到我的解决方案,但没有根据我的问题找到任何答案
我需要一个触发器来更改我的表变量的值,例如:我在一个名为 used_weight
的变量中有一个值 (200kg),当我在这个变量上插入、更新或删除时,该值应该像我的代码一样驱动。
编译错误如下
Warning: Trigger created with compilation errors
当我更新我的变量时,我得到的错误是
ERROR at line 1:
ORA-04098: trigger 'ALI.LEFT_BALANCE' is invalid and failed re-validation
这是我的代码:
create or replace trigger left_balance
before delete or insert or update on reels_table
for each row
declare
begin
user_weight:=:new.used_weight+:old.used_weight;
left_weight:=weight-used_weight;
end;
/
我声明了变量但错误仍然存在
create or replace trigger left_balance
before delete or insert or update on reels_table
for each row
declare
x number=:new.user_weight;
xx number=:old.user_weight;
begin
user_weight:=x+xx;
left_weight:=weight-user_weight;
end;
/
下面是一个简单的例子,但首先让我解释几件事:
在 plsql 代码中,当你想使用变量时,你必须声明它们(正如@sticky bit 解释的那样)。
示例:
declare var1 varchar2(10);
var1 varchar2(10);
您在 table reels_table1 上使用了触发器,这将导致突变错误,但是因为您使用了 before
,所以没有遇到错误。
正如@Daniel E 指出的那样,插入不会有旧值。
请注意,在下面的示例中,我创建了一个测试 table 并在更新中添加了一个条件,也许您会忘记它。
drop table reels_table1
/
create table reels_table1 (id number(4), user_weight number(4), left_weight number(4),weight number(4) )
/
create or replace trigger left_balance
before delete or insert or update on reels_table1
for each row
declare
x number(2) := :new.user_weight;
xx number (2) := :old.user_weight;
begin
update reels_table1 set
user_weight =x+xx where id =1;
update reels_table1 set left_weight = weight - user_weight where id=1;
end;
/