create or replace function goblin() returns trigger as ' -- trigger function called on update to gwb to enforce bank rules -- for transaction lab of CSC207 declare deposit integer; remit integer; -- taken out of pouch user char(20); begin select into user current_user; -- get user acct code -- raise info '' You are %'', user; IF new.acct <> old.acct THEN RAISE EXCEPTION ''% not authorized to change account code!!'', user; RETURN NULL; END IF; deposit = new.vault - old.vault; -- positive deposit would increse vault IF old.acct = user::char(5) THEN -- users account, may withdraw IF deposit > 0 AND old.pouch = 0 THEN RAISE EXCEPTION ''You have no money in your pouch, %, deposit of % rejected'', user, deposit; RETURN NULL; END IF; IF deposit > 0 AND deposit > old.pouch - new.pouch THEN new.pouch := old.pouch - deposit; RAISE WARNING ''We took the % from your pouch'', deposit; END IF; ELSIF old.acct <> ''out'' AND user <> ''jensen'' THEN -- other student account IF deposit < 0 THEN RAISE EXCEPTION ''% is not authorized to take % from vault of %'', user, deposit, old.acct; RETURN NULL; END IF; END IF; RETURN new; -- allow update end; ' language plpgsql;