Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СРС / 3 - Хран процедуры

.docx
Скачиваний:
7
Добавлен:
28.06.2021
Размер:
49.89 Кб
Скачать

11

Создание хранимых процедур для базы данных Book

Следующим шагом создадим хранимые процедуры для базы данных Book. Для создания хранимых процедур используем соответствующие операторы T-SQL.

Минимально необходимыми для базы данных Book являются хранимые процедуры, обеспечивающие выборку, вставку, модификацию и удаление данных для всех таблиц базы данных. Использование этих хранимых процедур позволяет:

  • ограничить возможности обычного пользователя в плане нанесения ущерба базе данных;

  • обеспечить построение эффективного кода приложения, работающего с базой данных.

1. Хранимые процедуры, необходимые для выборки, вставки, модификации и удаления данных для таблицы Catalogs.

Выборка данных (процедура Catalog_Select).

USE Book;

GO

IF OBJECT_ID( 'Catalog_Select', 'P' ) IS NOT NULL

DROP PROCEDURE Catalog_Select;

GO

CREATE PROCEDURE Catalog_Select ( @cat_ID int = NULL )

AS

BEGIN

SET NOCOUNT ON

SELECT

Catalogs.cat_ID,

Catalogs.cat_name

FROM Catalogs

WHERE

@cat_ID IS NULL OR Catalogs.cat_ID = @cat_ID

END

GO

Вызов процедуры Catalog_Select с указанием значения параметра @cat_ID позволяет получить данные о конкретном каталоге. Вызов этой же процедуры без указания значения параметра @cat_ID выводит все записи таблицы Catalogs.

Вставка данных (процедура Catalog_Insert).

USE Book;

GO

IF OBJECT_ID ( 'Catalog_Insert', 'P' ) IS NOT NULL

DROP PROCEDURE Catalog_Insert;

GO

CREATE PROCEDURE Catalog_Insert (

@cat_ID INT,

@cat_name varchar(20) )

AS

BEGIN

SET NOCOUNT ON

INSERT INTO Catalogs ( cat_ID, cat_name )

VALUES ( @cat_ID, @cat_name );

RETURN @@ERROR

END

GO

Вызов процедуры Catalog_Insert с указанием значений параметров @cat_ID, @cat_name позволяет ввести новую строку в таблицу Catalogs. Значение глобальной переменной @@ERROR характеризует правильность выполнения запроса.

Модификация данных (процедура Catalog_Update).

USE Book;

GO

IF OBJECT_ID ( 'Catalog_Update', 'P' ) IS NOT NULL

DROP PROCEDURE Catalog_Update;

GO

CREATE PROCEDURE Catalog_Update (

@cat_ID int,

@cat_name varchar(50))

AS

BEGIN

SET NOCOUNT ON;

UPDATE Catalogs

SET

cat_ID = @cat_ID,

cat_name = @cat_name

WHERE cat_ID = @cat_ID;

RETURN @@ERROR

END

GO

Вызов процедуры Catalog_Update с указанием значений параметров @cat_ID, @cat_name позволяет изменить название каталога в заданной строке таблицы Catalogs. Значение глобальной переменной @@ERROR характеризует правильность выполнения запроса.

Удаление данных (процедура Catalog_Delete).

USE Book;

GO

IF OBJECT_ID ( 'Catalog_Delete', 'P' ) IS NOT NULL

DROP PROCEDURE Catalog_Delete;

GO

CREATE PROCEDURE Catalog_Delete ( @cat_ID int = NULL)

AS

BEGIN

SET NOCOUNT ON;

DELETE FROM Catalogs

WHERE cat_ID = @cat_ID;

RETURN @@ERROR

END

GO

Вызов процедуры Catalog_Delete с указанием значения параметра @cat_ID позволяет удалить заданную строку в таблице Catalogs. Выведенное после вызова значение глобальной переменной @@ERROR позволяет убедиться в правильности выполнения запроса.

2. Хранимые процедуры, необходимые для выборки, вставки, модификации и удаления данных для таблицы Books.

Выборка данных (процедура Book_Select).

USE Book;

GO

IF OBJECT_ID( 'Book_Select', 'P' ) IS NOT NULL

DROP PROCEDURE Book_Select;

GO

CREATE PROCEDURE Book_Select (

@book_ID int = NULL,

@cat_ID int = NULL )

AS

BEGIN

SET NOCOUNT ON;

SELECT

Books.book_ID, Books.b_name, Books.b_author, Books.b_year,

Books.b_price, Books.b_count, Catalogs.cat_name

FROM Books LEFT OUTER JOIN Catalogs

ON Catalogs.cat_ID = Books.b_cat_ID

WHERE

( @book_ID IS NULL OR Books.book_ID = @book_ID ) AND

( @cat_ID IS NULL OR Books.b_cat_ID = @cat_ID )

END

GO

Вызов процедуры Book_Select с использованием значений параметров @book_ID и @cat_ID по умолчанию (NULL) позволяет получить список всех книг, имеющихся в интернет-магазине с распределением по каталогам.

Вызов процедуры Book_Select с указанием значения @book_ID = 3 (значение @cat_ID по умолчанию – NULL) позволяет получить данные о книге с кодом 3:

USE Book;

GO

EXEC Book_Select 3, DEFAULT;

GO

Соответственно, вызов процедуры Book_Select с указанием @cat_ID = 5 (значение @book_ID по умолчанию – NULL) позволяет получить данные обо всех книгах каталога с кодом 5:

USE Book;

GO

EXEC Book_Select DEFAULT, 5;

GO

Вставка данных (процедура Book_Insert).

USE Book;

GO

IF OBJECT_ID ( 'Book_Insert', 'P' ) IS NOT NULL

DROP PROCEDURE Book_Insert;

GO

CREATE PROCEDURE Book_Insert (

@book_ID INT,

@b_name varchar(100),

@b_author varchar(100),

@b_year INT,

@b_price MONEY = 0.00,

@b_count INT = 0,

@b_cat_ID INT )

AS

BEGIN

SET NOCOUNT ON;

INSERT INTO Books (

book_ID, b_name, b_author, b_year, b_price, b_count, b_cat_ID )

VALUES (

@book_ID, @b_name, @b_author, @b_year,

@b_price, @b_count, @b_cat_ID );

RETURN @@ERROR

END

GO

Вызов процедуры Book_Insert с указанием значений параметров позволяет ввести новую строку в таблицу Books. Значение глобальной переменной @@ERROR характеризует правильность выполнения запроса.

Модификация данных (процедура Book_Update).

USE Book;

GO

IF OBJECT_ID ( 'Book_Update', 'P' ) IS NOT NULL

DROP PROCEDURE Book_Update;

GO

CREATE PROCEDURE Book_Update (

@book_ID INT,

@b_name varchar(100),

@b_author varchar(100),

@b_year INT,

@b_price MONEY = 0.00,

@b_count INT = 0,

@b_cat_ID INT )

AS

BEGIN

SET NOCOUNT ON

UPDATE Books

SET

book_ID = @book_ID, b_name = @b_name, b_author = @b_author,

b_year = @b_year, b_price = @b_price, b_count = @b_count,

b_cat_ID = @b_cat_ID

WHERE book_ID = @book_ID

RETURN @@ERROR

END

GO

Вызов процедуры Book_Update с указанием значений параметров позволяет изменить данные о книге в заданной строке таблицы Books. Значение глобальной переменной @@ERROR характеризует правильность выполнения запроса.

Удаление данных (процедура Book_Delete).

USE Book;

GO

IF OBJECT_ID ( 'Book_Delete', 'P' ) IS NOT NULL

DROP PROCEDURE Book_Delete;

GO

CREATE PROCEDURE Book_Delete ( @book_ID int = NULL )

AS

BEGIN

SET NOCOUNT ON;

DELETE FROM Books

WHERE book_ID = @book_ID;

RETURN @@ERROR

END

GO

Вызов процедуры Book_Delete с указанием значения параметра @book_ID позволяет удалить заданную строку в таблице Books. Выведенное после вызова значение глобальной переменной @@ERROR позволяет убедиться в правильности выполнения запроса.

3. Хранимые процедуры, необходимые для выборки, вставки, модификации и удаления данных для таблицы Users.

Выборка данных (процедура User_Select).

USE Book;

GO

IF OBJECT_ID( 'User_Select', 'P' ) IS NOT NULL

DROP PROCEDURE User_Select;

GO

CREATE PROCEDURE User_Select ( @user_ID int = NULL )

AS

BEGIN

SET NOCOUNT ON;

SELECT

Users.user_ID, Users.u_name, Users.u_patronymic, Users.u_surname,

Users.u_phone, Users.u_email, Users.u_status

FROM Users

WHERE

( @user_ID IS NULL OR Users.user_ID = @user_ID )

END

GO

Вызов процедуры User_Select с указанием значения параметра @user_ID позволяет получить данные о конкретном клиенте. Вызов этой же процедуры без указания значения параметра @user_ID выводит все записи таблицы Users.

Вставка данных (процедура User_Insert).

USE Book;

GO

IF OBJECT_ID ( 'User_Insert', 'P' ) IS NOT NULL

DROP PROCEDURE User_Insert;

GO

CREATE PROCEDURE User_Insert (

@user_ID INT,

@u_name varchar(20),

@u_patronymic varchar(20),

@u_surname varchar(20),

@u_phone varchar(15),

@u_email varchar(20),

@u_status varchar(10) )

AS

BEGIN

SET NOCOUNT ON;

INSERT INTO Users (

user_ID, u_name, u_patronymic, u_surname,

u_phone, u_email, u_status )

VALUES (

@user_ID , @u_name , @u_patronymic , @u_surname ,

@u_phone , @u_email , @u_status );

RETURN @@ERROR

END

GO

Вызов процедуры User_Insert с указанием значений параметров позволяет ввести новую строку в таблицу Users. Значение глобальной переменной @@ERROR характеризует правильность выполнения запроса.

Модификация данных (процедура User_Update).

USE Book;

GO

IF OBJECT_ID ( 'User_Update', 'P' ) IS NOT NULL

DROP PROCEDURE User_Update;

GO

CREATE PROCEDURE User_Update (

@user_ID INT,

@u_name varchar(20),

@u_patronymic varchar(20),

@u_surname varchar(20),

@u_phone varchar(15),

@u_email varchar(20),

@u_status varchar(10) )

AS

BEGIN

SET NOCOUNT ON;

UPDATE Users

SET

user_ID = @user_ID, u_name = @u_name ,

u_patronymic = @u_patronymic, u_surname = @u_surname,

u_phone = @u_phone, u_email = @u_email,

u_status = @u_status

WHERE user_ID = @user_ID;

RETURN @@ERROR

END

GO

Вызов процедуры User_Update с указанием значений параметров позволяет изменить данные о клиенте в заданной строке таблицы Users. Значение глобальной переменной @@ERROR характеризует правильность выполнения запроса.

Удаление данных (процедура User_Delete).

USE Book;

GO

IF OBJECT_ID ( 'User_Delete', 'P' ) IS NOT NULL

DROP PROCEDURE User_Delete;

GO

CREATE PROCEDURE User_Delete ( @user_ID int = NULL )

AS

BEGIN

SET NOCOUNT ON;

DELETE FROM Users

WHERE user_ID = @user_ID;

RETURN @@ERROR

END

GO

Вызов процедуры User_Delete с указанием значения параметра @user_ID позволяет удалить заданную строку в таблице Users. Значение глобальной переменной @@ERROR характеризует правильность выполнения запроса.

4. Хранимые процедуры, необходимые для выборки, вставки, модификации и удаления данных для таблицы Orders.

Выборка данных (процедура Order_Select).

USE Book;

GO

IF OBJECT_ID( 'Order_Select', 'P' ) IS NOT NULL

DROP PROCEDURE Order_Select;

GO

CREATE PROCEDURE Order_Select (

@order_ID int = NULL,

@user_ID int = NULL,

@book_ID int = NULL )

AS

BEGIN

SET NOCOUNT ON;

SELECT

Orders.order_ID,

Orders.o_user_ID,

Users.u_name + ' ' + Users.u_surname AS 'user_full_name',

Orders.o_book_ID,

Books.b_name,

Orders.o_time,

Orders.o_number

FROM Orders

LEFT OUTER JOIN Users ON Users.user_ID = Orders.o_user_ID

LEFT OUTER JOIN Books ON Books.book_ID = Orders.o_book_ID

WHERE

( @order_ID IS NULL OR Orders.order_ID = @order_ID ) AND

( @user_ID IS NULL OR Orders.o_user_ID = @user_ID ) AND

( @book_ID IS NULL OR Orders.o_book_ID = @book_ID )

END

GO

Процедура Order_Select использует не только базовую таблицу Orders, но и связанные таблицы Users и Books. Три параметра процедуры – @order_ID, @user_ID и @book_ID обеспечивают широкие возможности по выборке данных.

Вызов процедуры Order_Select с использованием значений всех трех параметров по умолчанию (NULL) позволяет получить список всех заказов интернет-магазина.

Вызов процедуры Order_Select с указанием @order_ID = 1 (значения остальных параметров по умолчанию – NULL) позволяет получить информацию о заказе с кодом 1:

USE Book;

GO

EXEC Order_Select 1, DEFAULT, DEFAULT;

GO

Вызов процедуры Order_Select с указанием @user_ID = 3 (значения остальных параметров по умолчанию – NULL) позволяет получить список всех заказов пользователя с кодом 3:

USE Book;

GO

EXEC Order_Select DEFAULT, 3, DEFAULT;

GO

Вызов процедуры Order_Select с указанием @book_ID = 20 (значения остальных параметров по умолчанию – NULL) позволяет получить список всех заказов, содержащих книгу с кодом 20:

USE Book;

GO

EXEC Order_Select DEFAULT, DEFAULT, 20;

GO

Вызов процедуры Order_Select с указанием @user_ID = 3 и @book_ID = 20 (значение параметра @order_ID по умолчанию – NULL) позволяет получить список заказов пользователя с кодом 3, содержащих книгу с кодом 20:

USE Book;

GO

EXEC Order_Select DEFAULT, 3, 20;

GO

Вставка данных (процедура Order_Insert).

USE Book;

GO

IF OBJECT_ID( 'Order_Insert', 'P' ) IS NOT NULL

DROP PROCEDURE Order_Insert;

GO

CREATE PROCEDURE Order_Insert (

@order_ID int,

@user_ID int,

@book_ID int,

@o_time dateTIME,

@o_number INT )

AS

BEGIN

SET NOCOUNT ON;

INSERT INTO Orders (

order_ID, o_user_ID, o_book_ID,

o_time, o_number )

VALUES (

@order_ID , @user_ID , @book_ID ,

@o_time, @o_number );

RETURN @@ERROR

END

GO

Вызов процедуры Order_Insert с указанием значений всех параметров позволяет ввести новую строку в таблицу Orders.

Обновление данных (процедура Order_Update).

USE Book;

GO

IF OBJECT_ID( 'Order_Update', 'P' ) IS NOT NULL

DROP PROCEDURE Order_Update;

GO

CREATE PROCEDURE Order_Update (

@order_ID int,

@user_ID int,

@book_ID int,

@o_time dateTIME,

@o_number INT )

AS

BEGIN

SET NOCOUNT ON;

UPDATE Orders

SET

order_ID = @order_ID , o_user_ID = @user_ID ,

o_book_ID = @book_ID , o_time = @o_time ,

o_number = @o_number

WHERE order_ID = @order_ID;

RETURN @@ERROR

END

GO

Вызов процедуры Order_Update с указанием значений всех параметров изменяет строку в таблицу Orders.

Удаление данных (процедура Order_Delete).

USE Book;

GO

IF OBJECT_ID ( 'Order_Delete', 'P' ) IS NOT NULL

DROP PROCEDURE Order_Delete;

GO

CREATE PROCEDURE Order_Delete ( @order_ID int = NULL )

AS

BEGIN

SET NOCOUNT ON;

DELETE FROM Orders

WHERE order_ID = @order_ID;

RETURN @@ERROR

END

GO

Вызов процедуры Order_Delete с указанием значения параметра @order_ID позволяет удалить конкретную строку в таблице Orders. Выведенное после вызова значение глобальной переменной @@ERROR позволяет убедиться в правильности выполнения запроса.

Соседние файлы в папке СРС