Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
USE [Library2]
GO
CREATE PROCEDURE [dbo].[spr_IUAuthor](
@Author_Id int,
@Name varchar(50),
@Address varchar(50),
@Phone numeric(10, 0),
@Fax numeric(10, 0),
@Email varchar(40),
@Status bigint,
@p_Result int OUT)
AS
DECLARE @NewName varchar(50)
DECLARE @CurrentName varchar(50)
SET @NewName = ''
SET @CurrentName = ''
SET @p_Result = 0
BEGIN TRY
SET @NewName = (SELECT NAME FROM AUTHOR WHERE NAME = @Name)
IF (@Author_ID = 0)
IF (@NewName <> '')
SET @p_Result = 1
ELSE
INSERT INTO AUTHOR(
Name,
Address,
Phone,
Fax,
Email)
VALUES(
@Name,
@Address,
@Phone,
@Fax,
@Email)
ELSE
SET @CurrentName = (SELECT NAME FROM AUTHOR WHERE AUTHOR_ID =
@Author_Id)
IF ((@NewName <> '') AND (@CurrentName <> @Name))
SET @p_Result = 1
ELSE
UPDATE AUTHOR SET
Name = @Name,
Address = @Address,
Phone = @Phone,
Fax = @Fax,
Email = @Email,
Status = @Status
WHERE AUTHOR_ID = @Author_Id
END TRY
BEGIN CATCH
SET @p_Result = ERROR_NUMBER()
RETURN @p_Result
END CATCH
GO
CREATE PROCEDURE [dbo].[spr_IUBook](
@Book_Id int,
@Title varchar(50),
@Author_Id int,
@Publisher_Id int,
@Category_Id int,
@Key_Word varchar(100),
@Isbn numeric (13, 0),
@Status bigint,
@p_Result int OUT)
AS
DECLARE @v_Quantity int
SET @p_Result = 0
BEGIN TRY
IF (@Book_ID = 0)
BEGIN
INSERT INTO BOOK_MASTER(
Title,
Author_Id,
Publisher_Id,
Category_Id,
Key_Word,
ISBN)
VALUES(
@Title,
@Author_Id,
@Publisher_Id,
@Category_Id,
@Key_Word,
@Isbn)
ELSE
UPDATE BOOK_MASTER SET
Title = @Title,
Author_Id =
@Author_Id,
Publisher_Id =
@Publisher_Id,
Category_Id =
@Category_Id,
Key_Word =
@Key_Word,
ISBN = @Isbn,
Status =
@Status
WHERE BOOK_ID = @Book_ID
END TRY
BEGIN CATCH
SET @p_Result = ERROR_NUMBER()
RETURN @p_Result
END CATCH
GO
CREATE PROCEDURE [dbo].[spr_IUCategory](
@Category_Id int,
@Name varchar(50),
@Description varchar(255),
@Status int,
@p_Result int OUT)
AS
DECLARE @NewName varchar(50)
DECLARE @CurrentName varchar(50)
SET @NewName = ''
SET @CurrentName = ''
SET @p_Result = 0
BEGIN TRY
SET @NewName = (SELECT NAME FROM CATEGORY WHERE NAME = @Name)
IF (@Category_ID = 0)
IF (@NewName <> '')
SET @p_Result = 1
ELSE
INSERT INTO CATEGORY(
Name,
Description)
VALUES(
@Name,
@Description)
ELSE
SET @CurrentName = (SELECT NAME FROM CATEGORY WHERE CATEGORY_ID =
@Category_Id)
IF ((@NewName <> '') AND (@CurrentName <> @Name))
SET @p_Result = 1
ELSE
UPDATE CATEGORY SET
Name = @Name,
Description = @Description,
Status = @Status
WHERE CATEGORY_ID = @Category_Id
END TRY
BEGIN CATCH
SET @p_Result = ERROR_NUMBER()
RETURN @p_Result
END CATCH
GO
CREATE PROCEDURE [dbo].[spr_IUMember](
@Action char(1),
@Member_Id numeric(10, 0),
@User_Name varchar(20),
@Password varchar(20),
@First_Name varchar(40),
@Middle_Name varchar(40),
@Last_Name varchar(40),
@Status bigint,
@Address varchar(50),
@Email varchar(40),
@Phone numeric(10, 0),
@Mobile numeric(10, 0),
@Sex char(1),
@Security_Question varchar(100),
@Security_Answer varchar(100),
@Created_By numeric(10, 0),
@p_Result int OUT)
AS
DECLARE @Member NUMERIC(10, 0)
DECLARE @NewName varchar(50)
DECLARE @CurrentName varchar(50)
SET @Member = 0
SET @NewName = ''
SET @CurrentName = ''
SET @p_Result = 0
BEGIN TRY
SET @Member = (SELECT MEMBER_ID FROM MEMBER WHERE MEMBER_ID =
@Member_Id)
SET @NewName = (SELECT USER_NAME FROM MEMBER WHERE USER_NAME =
@User_Name)
IF (@Action = 'I')
IF (@NewName <> '')
SET @p_Result = 1
ELSE IF (@Member <> 0)
SET @p_Result = 2
ELSE
INSERT INTO MEMBER(
Member_Id,
User_Name,
Password,
First_Name,
Middle_Name,
Last_Name,
Status,
Address,
Email,
Phone,
Mobile,
Sex,
Security_Question,
Security_Answer,
Created_By,
Last_Upd_By)
VALUES(
@Member_Id,
@User_Name,
@Password,
@First_Name,
@Middle_Name,
@Last_Name,
@Status,
@Address,
@Email,
@Phone,
@Mobile,
@Sex,
@Security_Question,
@Security_Answer,
@Created_By,
@Created_By)
ELSE
SET @CurrentName = (SELECT USER_NAME FROM MEMBER WHERE MEMBER_ID =
@Member_Id)
IF ((@NewName <> '') AND (@CurrentName <> @User_Name))
SET @p_Result = 1
ELSE
UPDATE MEMBER SET
User_Name = @User_Name,
Password = @Password,
First_Name = @First_Name,
Middle_Name = @Middle_Name,
Last_Name = @Last_Name,
Status = @Status,
Address = @Address,
Email = @Email,
Phone = @Phone,
Mobile = @Mobile,
Sex = @Sex,
Security_Question =
@Security_Question,
Security_Answer =
@Security_Answer
WHERE Member_Id = @Member_Id
END TRY
BEGIN CATCH
SET @p_Result = ERROR_NUMBER()
RETURN @p_Result
END CATCH
GO
CREATE PROCEDURE [dbo].[spr_IUPublisher](
@Publisher_Id int,
@Name varchar(50),
@Publishing_Year int,
@Publishing_House varchar(50),
@Edition varchar(50),
@Address varchar(50),
@Phone numeric(10,0),
@Fax numeric(10,0),
@Email varchar(40),
@Status int,
@p_Result int OUT)
AS
DECLARE @NewName varchar(50)
DECLARE @CurrentName varchar(50)
SET @NewName = ''
SET @CurrentName = ''
SET @p_Result = 0
BEGIN TRY
SET @NewName = (SELECT NAME FROM PUBLISHER WHERE NAME = @Name)
IF (@Publisher_Id = 0)
IF (@NewName <> '')
SET @p_Result = 1
ELSE
INSERT INTO PUBLISHER(
Name,
Publishing_Year,
Publishing_House,
Edition,
Address,
Phone,
Fax,
Email)
VALUES(
@Name,
@Publishing_Year,
@Publishing_House,
@Edition,
@Address,
@Phone,
@Fax,
@Email)
ELSE
SET @CurrentName = (SELECT NAME FROM PUBLISHER WHERE PUBLISHER_ID =
@Publisher_Id)
IF ((@NewName <> '') AND (@CurrentName <> @Name))
SET @P_Result = 1
ELSE
UPDATE PUBLISHER SET
Name = @Name,
Publishing_Year = @Publishing_Year,
Publishing_House = @Publishing_House,
Edition = @Edition,
Address = @Address,
Phone = @Phone,
Fax = @Fax,
Email = @Email,
Status = @Status
WHERE PUBLISHER_ID = @Publisher_Id
END TRY
BEGIN CATCH
SET @P_Result = ERROR_NUMBER()
RETURN @P_Result
END CATCH
GO
CREATE PROCEDURE [dbo].[spr_CSearchRecord](
@p_TABLE varchar(20),
@p_DATASEARCH varchar(50),
@p_CONDITION varchar(50))
AS
DECLARE @p_DATASEARCHN NUMERIC(10, 0)
BEGIN
IF(@p_TABLE = 'MEMBER')
IF (@p_CONDITION <> '')
BEGIN
SELECT * FROM Member WHERE USER_NAME = @p_DATASEARCH AND
PASSWORD = @p_CONDITION
END
ELSE
BEGIN
SET @p_DATASEARCHN = CONVERT(NUMERIC (10,0), @p_DATASEARCH)
SELECT * FROM Member WHERE Member_id = @p_DATASEARCHN
END
ELSE IF (@p_TABLE = 'CATEGORY')
SELECT * FROM CATEGORY WHERE CATEGORY_ID = @p_DATASEARCH
END
GO
CREATE PROCEDURE [dbo].[spr_CLoadCombosLists](
@p_TABLE varchar(20))
AS
BEGIN
IF(@p_TABLE = 'CATEGORY')
SELECT CATEGORY_ID,NAME FROM CATEGORY
ELSE IF (@p_TABLE = 'AUTHOR')
SELECT AUTHOR_ID,NAME FROM AUTHOR
ELSE IF (@p_TABLE = 'PUBLISHER')
SELECT PUBLISHER_ID,NAME FROM PUBLISHER
ELSE IF (@p_TABLE = 'BOOK_MASTER')
SELECT BOOK_ID,TITLE FROM BOOK_MASTER
ELSE IF (@p_TABLE = 'MEMBER')
SELECT MEMBER_ID,(FIRST_NAME + ' ' + LAST_NAME) AS DETAIL FROM
MEMBER
ELSE IF (@p_TABLE = 'ALLRELATIONBOOK')
SELECT CATEGORY_ID,NAME, 'CATEGORY' AS CLAS FROM CATEGORY
UNION ALL(SELECT AUTHOR_ID,NAME, 'AUTHOR' AS CLAS FROM AUTHOR)
UNION ALL(SELECT PUBLISHER_ID,NAME, 'PUBLISHER' AS CLAS FROM
PUBLISHER)
ORDER BY CLAS
END
GO
CREATE FUNCTION [dbo].[GetReturnDate] (
@v_Book int
)
RETURNS smalldatetime
AS
BEGIN
DECLARE @v_ReturnDate smalldatetime
DECLARE @v_Holiday smalldatetime
DECLARE @v_Dia int
END
-- Search Holydays
SELECT @v_Holiday = Holiday
FROM HOLIDAYS
WHERE HOLIDAY = @v_ReturnDate
SET @v_Dia = DATEPART(weekday, @v_ReturnDate)
IF ((@v_Dia <> 6) AND (@v_Dia <> 7)) -- Business day
BEGIN
IF (@v_Holiday IS NOT NULL)
BEGIN
IF ((@v_Dia = 4) OR (@v_Dia = 5))
SET @v_ReturnDate=
(@v_ReturnDate+4)
END
ELSE
SET @v_ReturnDate= (@v_ReturnDate+1)
END
ELSE
IF (@v_Dia = 6)
SET @v_ReturnDate= (@v_ReturnDate+2)
ELSE
BEGIN
SET @v_ReturnDate= (@v_ReturnDate+1)
-- Search again Holidays if it's Monday
SET @v_Holiday=NULL
SELECT @v_Holiday = HOLIDAY
FROM HOLIDAYS
WHERE HOLIDAY = @v_ReturnDate
IF (@v_Holiday IS NOT NULL)
SET @v_ReturnDate= (@v_ReturnDate+1)
END
RETURN @v_ReturnDate
END
GO
CREATE PROCEDURE [dbo].[spr_UChangePassword]
@Member_Id numeric(10, 0),
@Password varchar(20),
@Result int OUT
AS
SET @Result = 0
BEGIN TRY
UPDATE MEMBER SET
PASSWORD = @Password
WHERE MEMBER_ID = @Member_Id
END TRY
BEGIN CATCH
SET @Result = ERROR_NUMBER()
RETURN @Result
END CATCH
GO
AS
DECLARE @p_DataSearchN NUMERIC(15, 0)
BEGIN
if (@p_searchcriteria = 'Book_Id')
BEGIN
SET @p_DataSearchN = CONVERT(NUMERIC (15,0), @p_Data)
GO
CREATE PROCEDURE [dbo].[spr_DeleteRecord](
@p_Table varchar(30),
@p_DataRemove int,
@p_Result int OUT)
AS
DECLARE @CheckIntegrity int
SET @CheckIntegrity = NULL
SET @p_Result = 0
BEGIN
IF (@p_Table = 'AUTHOR')
BEGIN
SELECT @CheckIntegrity=AUTHOR_ID FROM BOOK_MASTER WHERE AUTHOR_ID =
@p_DataRemove
IF (@CheckIntegrity IS NOT NULL)
SET @p_Result = 1
ELSE
DELETE FROM AUTHOR WHERE AUTHOR_ID = @p_DataRemove
END
ELSE IF (@p_Table = 'PUBLISHER')
BEGIN
SELECT @CheckIntegrity=PUBLISHER_ID FROM BOOK_MASTER
WHERE PUBLISHER_ID = @p_DataRemove
IF (@CheckIntegrity IS NOT NULL)
SET @p_Result = 1
ELSE
DELETE FROM PUBLISHER WHERE PUBLISHER_ID =
@p_DataRemove
END
ELSE IF (@p_Table = 'CATEGORY')
BEGIN
SELECT @CheckIntegrity=CATEGORY_ID FROM BOOK_MASTER
WHERE CATEGORY_ID = @p_DataRemove
IF (@CheckIntegrity IS NOT NULL)
SET @p_Result = 1
ELSE
DELETE FROM CATEGORY WHERE CATEGORY_ID =
@p_DataRemove
END
ELSE IF (@p_Table = 'BOOK_MASTER')
BEGIN
SELECT @CheckIntegrity=BOOK_ID FROM BOOK_TRANSACTION
WHERE BOOK_ID = @p_DataRemove
IF (@CheckIntegrity IS NOT NULL)
SET @p_Result = 1
ELSE
DELETE FROM BOOK_MASTER WHERE BOOK_ID =
@p_DataRemove
END
ELSE IF (@p_Table = 'MEMBER')
BEGIN
SELECT @CheckIntegrity=MEMBER_ID FROM MEMBER WHERE
MEMBER_ID = @p_DataRemove
IF (@CheckIntegrity IS NOT NULL)
SET @p_Result = 1
ELSE
DELETE FROM MEMBER WHERE MEMBER_ID = @p_DataRemove
END
--ELSE IF (@p_Table = 'HOLIDAYS')
--DELETE FROM HOLIDAYS WHERE HOLIDAY = CONVERT(@p_DataRemove,
smalldatetime)
END
GO
CREATE PROCEDURE [dbo].[spr_CValidateEmptyTable]
(
@p_Table varchar(30),
@p_Result INT OUT
)
AS
BEGIN
SET @p_Result = 0
IF (@p_Table = 'BOOKRELATION')
BEGIN
SELECT @p_Result = COUNT(*) FROM CATEGORY
IF (@p_Result = 0)
SET @p_Result = -1
ELSE
BEGIN
SELECT @p_Result = COUNT(*) FROM AUTHOR
IF (@p_Result = 0)
SET @p_Result = -2
ELSE
BEGIN
SELECT @p_Result = COUNT(*) FROM PUBLISHER
IF (@p_Result = 0)
SET @p_Result = -3
END
END
END
ELSE IF (@p_Table = 'BOOK_MASTER')
SELECT @p_Result = COUNT(*) FROM BOOK_MASTER
WHERE NOT EXISTS
(SELECT BOOK_ID
FROM BOOK_TRANSACTION
WHERE (BOOK_TRANSACTION.BOOK_ID = BOOK_ID))
ELSE IF (@p_Table = 'AUTHOR')
SELECT @p_Result = COUNT(*) FROM AUTHOR
ELSE IF (@p_Table = 'PUBLISHER')
SELECT @p_Result = COUNT(*) FROM PUBLISHER
ELSE IF (@p_Table = 'CATEGORY')
SELECT @p_Result = COUNT(*) FROM CATEGORY
END
GO
CREATE PROCEDURE [dbo].[Spr_BookTransaction](
@p_ACTION char (1), -- Only B = Borrow, R = Renovate, Other = Delete
@p_BOOK_ID int,
@p_MEMBER_ID numeric(10, 0),
@p_OBSERVATION varchar(255),
@p_USERCONECTED numeric(10, 0),
@p_ANSWER varchar(150) OUT
)
AS
DECLARE @v_Book int
DECLARE @v_Status int
DECLARE @v_Restriction bigint
DECLARE @v_Borrow int
DECLARE @v_DocumentSearch numeric(10, 0)
DECLARE @v_DateDevolution smalldatetime
DECLARE @v_DateRenovate smalldatetime
DECLARE @v_Renovate bigint
DECLARE @v_Defaulter bigint
DECLARE @v_SanctionDate smalldatetime
DECLARE @v_Member numeric(10, 0)
DECLARE @v_DevolutionControl smalldatetime
DECLARE @v_Holiday smalldatetime
DECLARE @v_SanctionDays int
DECLARE @v_BooksQuantity int
DECLARE @v_DateToday smalldatetime
DECLARE @v_Day varchar(15)
DECLARE @v_UserName varchar(20)
DECLARE @v_Title varchar(50)
BEGIN
-- Search Books
SELECT @v_Book =BOOK_ID, @v_Restriction =RESTRICTION, @v_Status=STATUS,
@v_Title = TITLE
FROM BOOK_MASTER
WHERE BOOK_ID = @p_BOOK_ID;
IF (@v_Book IS NOT NULL) -- If the book exists
BEGIN
-- Search Borrows
SELECT @v_Borrow=BOOK_ID, @v_DocumentSearch=MEMBER_ID,
@v_DateDevolution=RETURN_DATE, @v_Renovate=RENOVATE
FROM BOOK_TRANSACTION
WHERE BOOK_ID = @p_BOOK_ID;
IF (@v_Borrow IS NOT NULL) -- If exists
BEGIN
IF (@p_ACTION = 'B') -- Loan Request
SET @p_ANSWER= 'Book not available'
ELSE
BEGIN
-- Search Members
SELECT @v_Member=MEMBER_ID,
@v_SanctionDate=SANCTION_DATE, @v_Defaulter=DEFAULTER, @v_UserName = USER_NAME
FROM MEMBER
WHERE MEMBER_ID = @v_DocumentSearch
IF (@p_ACTION = 'R') -- Renovate
BEGIN
IF (@v_Defaulter = 0) --
If member is not defaulter
BEGIN
IF
(@v_Renovate = 0) -- If they renewed for the first time
BEGIN
SET
@v_DateRenovate = dbo.GetReturnDate(@p_BOOK_ID)
RENOVATE = 1,
RETURN_DATE = @v_DateRenovate,
LAST_UPD_BY = @p_USERCONECTED,
MODIFIED_DATE = getdate()
WHERE
BOOK_ID = @p_BOOK_ID
SET @p_ANSWER= '|The
loan was renewed successfully|' + CONVERT(varchar (20), @v_DateRenovate, 103)
END
ELSE
SET @p_ANSWER= 'The loan can
be renewed only once'
END
ELSE
SET @p_ANSWER= 'The member is
penalized'
END
ELSE -- Loan Request Removal
BEGIN
UPDATE BOOK_TRANSACTION SET -- Mark who
removed
LAST_UPD_BY = @p_USERCONECTED,
MODIFIED_DATE = getDate()
WHERE BOOK_ID = @p_BOOK_ID
-- LLenar Respaldo
INSERT INTO BOOK_TRANSACTION_BACKUP SELECT
* FROM BOOK_TRANSACTION WHERE BOOK_ID = @p_BOOK_ID
-- Eliminar Prestamo
DELETE FROM BOOK_TRANSACTION WHERE BOOK_ID
= @p_BOOK_ID
IF (@v_DateDevolution < getdate()) --
Sanction
BEGIN
ELSE
SET @v_SanctionDate =
DATEADD(day, @v_SanctionDays, @v_DateToday )
END
UPDATE MEMBER SET
SANCTION_DATE =
@v_SanctionDate,
LAST_UPD_BY =
@p_USERCONECTED,
MODIFIED_DATE =
getdate()
WHERE MEMBER_ID =
@v_DocumentSearch
SET @p_ANSWER = 'The loan was removed
successfully'
END
END
END
ELSE
IF (@p_ACTION = 'B')
BEGIN
SET @v_DocumentSearch = @p_MEMBER_ID
-- Search Member
SELECT @v_Member=MEMBER_ID,
@v_SanctionDate=SANCTION_DATE, @v_Defaulter=DEFAULTER, @v_UserName = USER_NAME
FROM MEMBER
WHERE MEMBER_ID = @v_DocumentSearch
IF (@v_Member IS NOT NULL) -- If
member exists
BEGIN
IF (@v_Defaulter = 0) --
If member is not defaulter
BEGIN
SELECT
@v_BooksQuantity = COUNT(*) FROM BOOK_TRANSACTION WHERE MEMBER_ID = @p_MEMBER_ID
IF
(@v_BooksQuantity < 3)
BEGIN
BEGIN
IF (@v_Status = 0) -- If Status = OK
BEGIN
INSERT INTO
BOOK_TRANSACTION(BOOK_ID,MEMBER_ID,RETURN_DATE,OBSERVATION,CREATED_BY,LAST_UPD_BY)
VALUES(@p_BOOK_ID,@p_MEMBER_ID,@v_DevolutionControl,@p_OBSERVATION,@p_USERCONECTED,
@p_USERCONECTED)
END
ELSE
END
ELSE
***********************
Sequence Actions
***********************
Search Book
IF exists THEN
Search Loan
IF exists THEN
IF (Action = B) THEN
Message = "Book not available"
ELSE
Search Member
IF (Action = R) THEN
IF (Defaulter = 0) THEN
IF (Renovate = 0) THEN
Message= "The loan was renewed successfully"
ELSE
Message= "The loan can be renewed only once"
END IF
ELSE
Message= "The member is penalized"
END IF
ELSE
Message= "The loan was removed successfully"
END IF
END IF
ELSE
Search Member
IF exists THEN
IF (Action = B) THEN
IF (Defaulter = 0) THEN
IF (Books Quantity < 3) THEN
IF (Restriction = 0) THEN
IF (Status = Ok) THEN
Message= "The loan was recorded successfully"
ELSE
Message= "The book is in repair"
END IF
ELSE
Message= "Book internal consultation"
END IF
ELSE
Message= "The number of books on loan exceeds the allowed
limit"
END IF
ELSE
Message= "The member is penalized"
END IF
ELSE
Message= "The action is invalid"
END IF
ELSE
Message= "The member does not exist"
END IF
END IF
ELSE
Message= "The book does not exist"
END IF
*/
GO
CREATE PROCEDURE [dbo].[spr_UpdateDefaulter]
-- This procedure should be created as a job to run daily
AS
BEGIN
-- Update Defaulter Status
UPDATE MEMBER
SET DEFAULTER = 1
WHERE MEMBER_ID IN(SELECT MEMBER_ID FROM BOOK_TRANSACTION WHERE RETURN_DATE
< GETDATE())
-- Delete Sanctions
UPDATE MEMBER
SET DEFAULTER = 0,
SANCTION_DATE = NULL
WHERE SANCTION_DATE IS NOT NULL AND SANCTION_DATE < GETDATE()
END