Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TABLE book (
- book_id SERIAL PRIMARY KEY
- ---other stuff
- );
- CREATE TABLE loan (
- loan_id SERIAL PRIMARY KEY,
- loan_date DATE NOT NULL,
- return_date DATE,
- user_id SERIAL REFERENCES library_user (user_id) ON UPDATE CASCADE ON DELETE RESTRICT
- );
- CREATE TABLE loan_book (
- loan_id SERIAL REFERENCES loan (loan_id) ON UPDATE CASCADE,
- book_id SERIAL REFERENCES book (book_id) ON UPDATE CASCADE,
- CONSTRAINT loan_book_id PRIMARY KEY (loan_id, book_id)
- );
- CREATE FUNCTION loan_count() RETURNS trigger AS $loan_count$
- DECLARE
- max_book_count INTEGER := 3;
- book_count INTEGER := 0;
- fun_check BOOLEAN := false;
- BEGIN
- SELECT INTO book_count COUNT(*)
- FROM (
- SELECT * FROM loan NATURAL JOIN loan_book
- WHERE loan.loan_id = loan_book.loan_id
- AND loan.return_date > current_date) as subq
- WHERE subq.user_id = new.user_id;
- IF book_count >= max_book_count THEN
- RAISE EXCEPTION 'A user cannot borrow more than % books.', max_book_count;
- END IF;
- RETURN NEW;
- END;
- $loan_count$ LANGUAGE plpgsql;
- CREATE TRIGGER loan_count
- BEFORE INSERT OR UPDATE ON loan
- FOR EACH ROW EXECUTE PROCEDURE loan_count();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement