Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*create table account(id serial primary key, balance double precision not null default(0));
  2. create table ledger(id serial primary key, account int not null, amount double precision not null, constraint fk_ledger_account foreign key (account) references account(id));*/
  3. /*
  4. select * from account order by 1;
  5. select * from ledger;
  6.  
  7. -- delete from ledger;
  8. */
  9.  
  10. create or replace function func_trg_ledger() returns trigger
  11.  as $$
  12.  declare    newAmount numeric(15,4);
  13.         oldAmount numeric(15,4);
  14.         accountid int;
  15.  begin
  16.    if TG_OP = 'DELETE' then
  17.     newAmount :=0;
  18.     oldAmount :=OLD.amount;
  19.     accountid := OLD.account;
  20.    elsif TG_OP = 'INSERT' then
  21.     newAmount :=NEW.amount;
  22.     oldAmount :=0;
  23.     accountid := NEW.account;
  24.    else
  25.     newAmount :=NEW.amount;
  26.     oldAmount :=OLD.amount;
  27.     accountid := NEW.account;
  28.    end if;
  29.  
  30.     update account set balance = balance + newAmount - oldAmount
  31.     where id = accountid;
  32.  
  33.    return null;
  34.  end;
  35. $$ language plpgsql;
  36.  
  37. /*
  38.  
  39. --DROP TRIGGER trg_ledger ON ledger;
  40.  
  41. create trigger trg_ledger after insert or update or delete on ledger
  42.  for each row execute procedure func_trg_ledger();
  43.  */
  44.  
  45.  insert into ledger(account,amount) values(1,95);
  46.  
  47.  begin transaction;
  48.  rollback transaction;
  49.  commit transaction;
  50.  
  51.  update ledger set amount = amount - 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement