Upload
nwbgh
View
704
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
Library Project Sql Stored Procedures
CREATE PROCEDURE AdultMember
(@FirstName varchar(15), @LastName varchar(15), @MiddleInitial char(1), @MemberID smallint OUTPUT, @PhoneNumber varchar(10), @ExpirationDate smallint, @ZipCode varchar(5), @Street smallint, @State smallint, @City smallint)
ASBEGIN IF @FirstName IS NULL BEGIN --RAISERROR('Adult FirstName is not null',15,1); return-15 END IF @LastName IS NULL BEGIN --RAISERROR('Adult LastName is not null',15,1); return-15 END IF @MiddleInitial IS NULL BEGIN --RAISERROR('Adult FirstName is not null',1); return-1 END IF @MemberID IS NULL OR @MemberID<0 BEGIN --RAISERROR('Adult MemberID is not null',1); return-1 END IF @PhoneNumber IS NULL BEGIN --RAISERROR('Adult PhoneNumber is not null',10); return-10 END IF @ExpirationDate IS NULL BEGIN --RAISERROR('Adult ExpirationDate is not null',1); return-1 END IF @ZipCode IS NULL
BEGIN --RAISERROR('Adult ZipCode is not null',5); return-5 END IF @Street IS NULL BEGIN --RAISERROR('Adult Street is not null',1); return-1 END IF @State IS NULL BEGIN --RAISERROR('Adult State is not null',1); return-1 END IF @City IS NULL BEGIN --RAISERROR('Adult City is not null',1); return-1 END --Need to wrap the INSERTs, UPDATEs, and DELETEs in a transaction DJL INSERT INTO member(firstName, middleinitial, lastname) VALUES(@firstName, @MiddleInitial, @LastName); select @memberid = SCOPE_IDENTITY(); INSERT INTO adult(member_no, phone_no, city, [state], street, zip, expr_date) VALUES(@MemberID, @PhoneNumber, @City, @State, @Street, @ZipCode, @ExpirationDate); END BEGIN TRY
EXEC @MemberID = @MemberID'Nana', 'W', 'Boama', '3107 petre st', 'chesapekae', 'VA', '23325', '', '03/05/2010', 0; END TRY BEGIN CATCH
PRINT 'Test memberid: FAIL -- CAUGHT Exception'; END CATCH IF ( SELECT COUNT(*)
FROM member AS m INNER JOIN adult AS a ON m.member_no = a.member_no WHERE m.member_no = m.member_no) = 1 PRINT 'Test MemberID: PASS -- memberid = ' + CAST(@memberID AS
varchar); ELSE
PRINT 'Test MemberID: FAIL -- memberid = ' + CAST(@memberID AS varchar);
CREATE PROCEDURE JuvenileMember
(@FirstName varchar(15), @LastName varchar(15), @MiddleInitial char(1), @MemberID smallint OUTPUT, @BirthDate datetime, @AdultSponsorID smallint)ASBEGIN IF @FirstName IS NULL BEGIN --RAISERROR('Juvenile FirstName is null',15,1); return-15 END IF @LastName IS NULL BEGIN --RAISERROR('Juvenile LastName is null',15,1); return-16 END IF @MiddleInitial IS NULL BEGIN --RAISERROR('Juvenile FirstName is null',1); return-17 END
IF @MemberID IS NULL OR @MemberID<0 BEGIN --RAISERROR('Juvenile MemberID is null',1); return-18 END IF @AdultSponsorID IS NULL OR @AdultSponsorID<0 BEGIN --RAISERROR('Adult Sponsor ID is null',1); return-19 END
IF @BirthDate IS NULL BEGIN --RAISERROR('Birthdate is null',1); return-20 END
--Need to wrap the INSERTs, UPDATEs, and DELETEs in a transaction DJL INSERT INTO member(firstName, middleinitial, lastname) VALUES(@firstName, @MiddleInitial, @LastName); select @memberid = SCOPE_IDENTITY(); INSERT INTO juvenile(member_no, adult_member_no, birth_date) VALUES(@MemberID, @AdultSponsorID, @BirthDate END
CREATE PROCEDURE AddBook @ISBN int, @Translation nvarchar (8) = NULL, @Cover nvarchar (8) = NULL, @Title nvarchar (63), @Author nvarchar (31), @Synopsis text = NULL, @Loanable nchar (1), @CopyNo smallint OUTPUT
AS --Test for null values. IF @ISBN is NULL OR @Loanable is NULL OR @Title is NULL OR @Author is NULL BEGIN RAISERROR('Invalid data entry.',11,1) RETURN END
--Test to see if the item exists in library. DECLARE @ItemCount int SELECT @ItemCount = count(*) FROM dbo.item as it WHERE it.isbn = @ISBN IF @ItemCount < 1 --The item doesn't exist so add it. BEGIN BEGIN TRANSACTION DECLARE @TitleNo int --Add record to the title table first. INSERT dbo.title (title,author,synopsis) VALUES (@Title,@Author,@Synopsis) IF @@Error <> 0 BEGIN RAISERROR('Cannot add item.',11,1) ROLLBACK TRANSACTION RETURN END
SET @TitleNo = @@IDENTITY --Add record to the item table next. INSERT dbo.item (isbn,title_no,translation,cover,loanable) VALUES (@ISBN,@TitleNo,@Translation,@Cover,@Loanable) IF @@ERROR <> 0 BEGIN RAISERROR('Cannot add item.',11,1) ROLLBACK TRANSACTION RETURN END
--Add record to the copy table next. SET @CopyNo = 1 INSERT dbo.copy
(isbn,copy_no,title_no,on_loan) VALUES (@ISBN,@CopyNo,@TitleNo,'N') IF @@ERROR <> 0 BEGIN
RAISERROR('Cannot add item.',11,1) ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION END ELSE BEGIN --The item already exists. Add another copy. --First determine what the title number is. SELECT @TitleNo = title_no FROM dbo.item WHERE isbn = @ISBN --Then determine what the copy number should be --by counting how many copies already exist. DECLARE @CopyCount int SELECT @CopyCount = count(*) FROM dbo.copy as co WHERE co.isbn = @isbn --The latest copy # should be the count + 1. SET @CopyNo = @CopyCount + 1 BEGIN TRANSACTION --Add record to the copy table. INSERT dbo.copy (isbn,copy_no,title_no,on_loan) VALUES (@ISBN,@CopyNo,@TitleNo,'N') IF @@ERROR <> 0 BEGIN RAISERROR('Cannot add item.',11,1) ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION END
CREATE PROC AddCopy
(@isbn int,@copynum smallint)
AS BEGIN
IF @isbn IS NULLBEGIN--RAISERRORreturn -1;END
IF @copynum IS NULLBEGIN--RAISERRORreturn -1;END
SELECT title, out_date, due_date, translation, author, loanable, member_no, coverFROM copy INNER JOIN title ON copy.title_no = copy.title_no
INNER JOIN item ON item.isbn = copy.isbn LEFT OUTER JOIN loan ON loan.isbn = copy.isbn AND loan.copy_no = copy.copy_no
WHERE copy.isbn = @isbn AND copy.copy_no = @copynum;
END
CREATE PROCEDURE CheckInItem(@isbn int, @copyNumber smallint ) AS BEGIN IF @isbn IS NULL BEGIN --RAISERROR return -1; END IF @copyNumber is NULL BEGIN --RAISERROR return -1; END --Need to wrap the INSERTs, UPDATEs, and DELETEs in a transaction DJLDECLARE @loanID smallint; INSERT INTO loanhist(isbn, copy_no) --Need to populate other columns in loanhist DJL VALUES(@isbn, @copyNumber) UPDATE copy SET on_loan ='N' WHERE isbn = @isbn AND copy_no = @copyNumber DELETE FROM loan WHERE isbn = @isbn AND copy_no = @copyNumber END
CREATE PROC CheckOutItem(@isbn int, @copyNumber smallint, @memberNumber smallint ) AS BEGIN IF @isbn IS NULL BEGIN --RAISERROR return -1; END IF @copyNumber is NULL BEGIN --RAISERROR return -1; END IF @memberNumber IS NULL BEGIN --RAISERROR return -1; END DECLARE @ItemCount int SELECT @ItemCount = COUNT(*) FROM [dbo].[item] as it
join [dbo].[copy] as co onit.isbn = co.isbn
WHERE it.isbn = @isbn AND co.copy_no = @copyNumber IF @ItemCount < 1 BEGIN
RAISERROR('item does not exist in this library.', 11,1)Return
END DECLARE @Loanable nvarchar (1) SELECT @Loanable = loanable FROM [dbo].[item] WHERE isbn = @isbn IF @Loanable ='N' BEGIN RAISERROR('Check out not successful, Item not loanable,', 11,1) RETURN END DECLARE @OnLoan nvarchar (1) SELECT @OnLoan = on_loan FROM [dbo].[copy] WHERE isbn = @isbn AND copy_no = @copyNumber IF @Loanable = 'Y' BEGIN RAISERROR('Check out not successful,',12,1) END DECLARE @TitleNo int SELECT @TitleNo = title_no FROM [dbo].[copy] WHERE isbn = @isbn AND copy_no = @copyNumber
DECLARE @OutDate datetime DECLARE @DueDate datetime SET @OutDate = GETDATE() SET @DueDate = DATEADD(DAY, 14, GETDATE()) BEGIN TRANSACTION UPDATE [dbo].[copy] SET on_loan = 'Y' WHERE isbn = @isbn AND copy_no = @copyNumber if @@ERROR <> 0 BEGIN RAISERROR('item not checked out,',11,1) ROLLBACK TRANSACTION RETURN END INSERT [dbo].[loan]
(isbn,copy_no, title_no, member_no, out_date, due_date) VALUEs (@isbn, @copyNumber, @TitleNo, @memberNumber, @OutDate, @DueDate) if @@ERROR <> 0 BEGIN RAISERROR('Error, item not checked out.',11,1) ROLLBACK TRANSACTION RETURN END END
CREATE PROC ConvertJuvToAdult
(@memberID smallint)
ASBEGIN
IF @memberid IS NULLBEGIN
--RAISERRORreturn -1;
END
SELECT juvenile.member_no, juvenile.birth_date, juvenile.adult_member_no, adult.street, adult.city, adult.state, adult.zip, adult.phone_no, adult.expr_dateFROM dbo.adult Adult, dbo.juvenile
WHERE adult.member_no = juvenile.member_noAND juvenile.member_no = adult.member_noSELECT juvenile.member_no, juvenile.adult_member_no, juvenile.birth_date, adult.street, adult.city, adult.state, adult.zip, adult.phone_no, adult.expr_dateFROM dbo.adult Adult, dbo.juvenile Juvenile, dbo.member MemberWHERE Adult.member_no = Juvenile.adult_member_noAND Juvenile.member_no = Member.member_noAND Member.member_no = Juvenile.member_no
END
CREATE PROC DeleteMember @MemberID int AS --Test for null values. IF @MemberID is NULL BEGIN RAISERROR('Invalid data entry.',11,1) RETURN END --Test for adult member. DECLARE @AdultCount int SELECT @AdultCount = count(*) FROM adult WHERE member_no = @MemberID IF @AdultCount > 0 BEGIN BEGIN TRANSACTION DELETE dbo.adult WHERE member_no = @MemberID --Test for successful deletion. if @@ERROR <> 0 BEGIN RAISERROR('Error, member not deleted.',11,1) ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION RETURN END --Test for juvenile member. DECLARE @JuvenileCount int SELECT @JuvenileCount = count(*) FROM juvenile WHERE member_no = @MemberID IF @JuvenileCount > 0 BEGIN
BEGIN TRANSACTION DELETE dbo.juvenile WHERE member_no = @MemberID --Test for successful deletion. if @@ERROR <> 0 BEGIN RAISERROR('Error, member not deleted.',11,1) ROLLBACK TRANSACTION RETURN
ENDCOMMIT TRANSACTIONRETURN
END
CREATE PROC GetItem
( @isbn int, @copyno smallint)
ASBEGIN IF @isbn IS NULL BEGIN --RAISERROR return -1; END
IF @copyno IS NULL BEGIN --RAISERROR return -1; END --Test to see if the item exists in library.
DECLARE @ItemCount int SELECT @ItemCount = count(*) FROM [dbo].[item] as it
JOIN [dbo].[copy] as co ON it.isbn = co.isbn
WHERE it.isbn = @isbn AND co.copy_no = @CopyNo IF @ItemCount < 1 BEGIN RAISERROR('Item does not exist in this library.',11,1) RETURN END
SELECT title, author, translation, cover, loanable, member_no, out_date, due_date FROM copy INNER JOIN title ON copy.title_no = title.title_no
INNER JOIN item ON item.isbn = copy.isbn LEFT OUTER JOIN loan ON loan.isbn = copy.isbn AND loan.copy_no = copy.copy_no WHERE copy.isbn = @isbn AND copy.copy_no = @copyno;
END
CREATE PROCEDURE GetItems
( @memberno smallint)
ASBEGIN IF @memberno IS NULL BEGIN --RAISERROR return -1; END
SELECT loan.isbn, loan.copy_no, title, author, out_date, due_date FROM loan INNER JOIN title ON loan.title_no = title.title_no INNER JOIN item ON item.isbn = loan.isbn WHERE member_no = @memberno;
END
CREATE PROCEDURE GetMemberByItem(@isbn int, @copyno smallint ) AS BEGIN IF @isbn IS NULL BEGIN --RAISERROR return -1; END IF @copyno IS NULL BEGIN --RAISERROR return -1; END SELECT title, author, translation, cover, loanable, member_no, out_date, due_date FROM copy INNER JOIN title ON copy.title_no = title.title_no
INNER JOIN item ON item.isbn = copy.isbn LEFT OUTER JOIN loan ON loan.isbn = copy.isbn AND loan.copy_no = copy.copy_no WHERE copy.isbn = @isbn AND copy.copy_no = @copyno; END
CREATE PROC SetExpirationDate(@memberID smallint)
ASBEGIN
IF @memberid IS NULLBEGIN
--RAISERRORreturn -1;
END
DECLARE @OutDate datetimeDECLARE @DueDate datetimeSET @OutDate = GETDATE()SET @DueDate = DATEADD(DAY,14,GETDATE())
end