exam:
create or replace trigger audit_trigger
before insert or update on pl_purchase
for each row
declare
  no_name_change  exception;
  quant_change    number(5):=0;
begin
  if (updating and (:new.product_name<>:old.product_name))
  then
    raise no_name_change;
  end if;  if (((updating) and (:old.order_number is null)) 
  or
  ((inserting) and (:new.order_number is null)))
  then 
    select order_num_seq.nextval
    into :new.order_number
    from dual;
  end if;  if (updating)
  then
    quant_change:=:new.quantity-:old.quantity;
  else
    quant_change:=:new.quantity;
  end if;  insert into pl_audit
  values(:new.order_number,
  :new.salesperson,
  user,
  userenv('terminal'),
  quant_change,
  sysdate);
  
  exception
    when no_name_change
    then
      dbms_output.put_line('change of product name not allowed');
      dbms_output.put_line('aborting and resetting to ole values');
      :new.product_name:=:old.product_name;
      :new.salesperson:=:old.salesperson;
      :new.order_number:=:old.order_number;
      :new.quantity:=:old.quantity;
end audit_trigger;
/