Advertisement
Guest User

Untitled

a guest
May 29th, 2016
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. CREATE TABLE book (
  2. book_id SERIAL PRIMARY KEY
  3. ---other stuff
  4. );
  5.  
  6. CREATE TABLE loan (
  7. loan_id SERIAL PRIMARY KEY,
  8. loan_date DATE NOT NULL,
  9. return_date DATE,
  10. user_id SERIAL REFERENCES library_user (user_id) ON UPDATE CASCADE ON DELETE RESTRICT
  11. );
  12.  
  13. CREATE TABLE loan_book (
  14. loan_id SERIAL REFERENCES loan (loan_id) ON UPDATE CASCADE,
  15. book_id SERIAL REFERENCES book (book_id) ON UPDATE CASCADE,
  16. CONSTRAINT loan_book_id PRIMARY KEY (loan_id, book_id)
  17. );
  18.  
  19. CREATE FUNCTION loan_count() RETURNS trigger AS $loan_count$
  20. DECLARE
  21. max_book_count INTEGER := 3;
  22. book_count INTEGER := 0;
  23. fun_check BOOLEAN := false;
  24.  
  25. BEGIN
  26. SELECT INTO book_count COUNT(*)
  27. FROM (
  28. SELECT * FROM loan NATURAL JOIN loan_book
  29. WHERE loan.loan_id = loan_book.loan_id
  30. AND loan.return_date > current_date) as subq
  31. WHERE subq.user_id = new.user_id;
  32.  
  33. IF book_count >= max_book_count THEN
  34. RAISE EXCEPTION 'A user cannot borrow more than % books.', max_book_count;
  35. END IF;
  36.  
  37. RETURN NEW;
  38. END;
  39. $loan_count$ LANGUAGE plpgsql;
  40.  
  41. CREATE TRIGGER loan_count
  42. BEFORE INSERT OR UPDATE ON loan
  43. FOR EACH ROW EXECUTE PROCEDURE loan_count();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement