I want to add 100 dollars to the old money, But tell me ORA-00936: missing expression
x
create table sala(
salary char(4));
insert into sala values(300);
create or replace trigger update_sal
after insert on sala
for each row
when(new.salary in not null)
begin
update sala set salary=new.salary + 100;
end;
Advertisement
Answer
The trigger syntax is not correct.
Try this:
create or replace trigger update_sal
before insert on sala
for each row
begin
if :new.salary is not null then
:new.salary := :new.salary + 100;
end if;
end;
Key points:
- You can’t update the same table that the trigger is on–this causes a mutating table error. The way to do this is by assigning the value directly, as shown above.
- You can’t modify the
:NEW
value in anafter
trigger. You can do so in abefore
trigger though. - The pseudo record is prefixed with a colon, as
:NEW
After adding this trigger, here is the result:
insert into sala values(700);
select * from sala;
800