Программирование >>  Реализация баз данных 

1 ... 88 89 90 [ 91 ] 92 93 94 ... 162


RETURN(2)

ELSE IF

@/Vddress1 IS NULL OR ir,i\ IS NULL OR ©State IS NULL OR @Zip IS NULL RETURN{3)

ELSE

INSERT [BopkStiopDB]. [dbo], [Customers] (FirstName, LastName, Phone. Addressl. Adtiress2. City, State, Zip) VALUES

(©FirstName, ©LastName, @Phone, ©Addressl, @Address2, @City. ©State, ©Zip) RETURN(SELECT ©IDENTITY AS Identity) IF ©©ERROR О 0 RETURN(4)

Теперь для каждой входной переменной задано значение по умолчанию. Такая методика позволяет избежать ошибок. Например, если значение параметра ©FirstName не задано, по умолчанию оно равно unknown едура исполняется корректно. Однако при этом процедура вернет 1. Эта часть программы не противоречит бизнес-правилу, согласно которому необходимо ввести имя или фамилию, а также ограничению check, налагаемому на пол Name ame в BookShopDB. Если не введен номер телефона, то по умолчанию используется значение NULL, а исполняемой процедуре посылается код возврата 2. Если отсутствует какая-либо часть адреса, то исполняемой процедуре посылается код возврата 3. Обратите внимание, что входной параметр не задействован в проверке ошибок адреса, поскольку он не обязателен. Если заданы все параметры, то вызывается оператор INSERT. Если исполнение оператора INSERT заканчивается неудачей из-за ошибки базы данных, няемой программе посылается код возврата 4,

При работе с хранимой процедурой иногда требуется добавить к процедуре дополнительные команды для обработки ошибок. Например, перед созданием новой записи о покупателе следует проверить наличие дублирующихся сведений о покупателе.

Комментарии удалены для того, чтобы уменьшить размер программы. Тем не менее обязательно сопровождайте встроенными комментариями все программы, которые вы пишите. Они помогут другим понять назначение вашего код.1 вам - вспомнить его,

если понадобится). Поместите в начале программы комментарий с краткими сведениями о назначении процедуры, датой ее создания, вашим именем и инициалами. 2. На панели Editor в окне введите и исполните следующий код:

DECLARE Соие int

EXECUTE @rCode=dbo. AddCustomer

@FirstName= Jamie, ©LastName - Marra,

@Phone = 425-555-1212, ©Addressl = 20 Oak St., SE,

©City = Remy, ®State = WA, @Zip = 98883

IF ©r Code = 4

BEGIN

PRINT database error has occured

Please contact the help desk for assistance.



I[6 ашмый процедуры Глаш 8

IF tr Code = I

PRINT You must specify a value for the firstname or lastname ELSE IE @r Code = 2

PRINT -You must specify a value for the phone number ELSE IE @r CociP = 3

PRINT -You must provide all address information, Street address, .. , State and Zipcode

ELSE IE dP = DENTITY

SELECT [Customer ID] = The new customer ID is: + CONVERT{CHAR(2),

@r Code)

К базе данных добавляется новая запись о покупателе. Во время исполнения процедуры работает код для проверки наличия ошибок. Изучите каждое значение переменной

@r Code и информацию, которая возвращается пользователю в случае ошибки.

Обратите внимание, что введена та же информация о покупателе, что при исполнении процедуры. В следующем упражнении вы создадите хранимую процедуру для проверки таблицы Customers, которая позволит избежать создания повторяющихся записей о покупателях.

Р- Создание хранимое защищающей оования информации о покупателях

Проверка на наличие в записях - важная часть процесса

ввода новой записи. На панели Editor в окне Query введите и исполните следующий код:

CREATE PROCEDURE dbo. CtieckForDuplicateCustomer . . ®1 EirstName varchar(30).= unknown, ©lLastNarie varchar{30}= unknown,

giljity varchar(15) = V.V \ 1 State varchar(7) = NULL, @1 Phone varchar(24) = NULL, ioFirstName varchar(30) OUTPUT, @o LastNafr.e varctiar(30j OUTPUT, @o City varchar(15) OUTPUT. @0 State varchar(7) OUTPUT, go.Phone varchar(24) OUTPUT AS

SELECT @>o FirstNanie=firstnarne, io LastName=iastname, §n ritv-rv. @o State=state, (aio Phone=phone FROM customers

wHtHt Tirstname=@1 FirstName AND lastname-(a1 LastNanie

AND city=@1 n--v AND state=.si1 Stata AND phone=@1 Phone IE ©@flOWCOUNl о 0

RETURN(5)

В зависимости от значения входных параметров, эта хранимая процедура проверяет

таблицу Customers на наличие в ней записей с одинаковыми именами, фамилиями,

городом или телефонами. Имени входных параметров начинаются с 1, что позволяет отличить их от таковых в хранимой процедуре AddCustomer. Оператор SELECT устанавливает выходные параметры равными значениям соответствующих столбцов таблицы Customers. Проверка на совпадение записей выполняется в конструкции WHERE. Проверяется равенство значений столбцов и входных параметров. Если функция @@ROWCOLfNT возвращает знатение больше О, то для хранимой процедуры устанавливается код возврата 5.



2. Введите на панели Editor в окне Query и исполните кол:

ALTER PROCEDURE dbo.AddCustomer ©FirstName varchar(30)= unknown,

©LastName varchar(30)= unknown, ©Phone varchar(.24) - NULL, ©Addressl varchar(60) = NULL,

@iAdoress2 varchar(60) = unknown, ©City varchar(15) - NULL,

©S*ate varchar(7) = NULL, ©Zip varchar(12) = NULL

IF (©FirstName = unknown) AND (©LastName = unknown)

RETURN(I) ELSE I one IS NULL

RETURN(2)

ELSE IE MAridresst IS MUll. OR ©City IS NULL OR ©StatP IS NULL OR IS NULL

RETURN(3) -- Начало вложенной процедуры DECLARE S- Code int, ©v FirstName varchar(30), ©v LuL;j4ame varchar(30), ©v City varcharCiS), ©v State varchar(7), ©v Pfione varchar(24) EXECUTE @r eode=dbo.Ch.eckForDupllcateeustomer ©l FirstName ©1 LastNaiiie = ©LastName, ©1 City ©1 State ©1 Phone = ©Phone, ©o FirstName = @vFirstName output,

©oLastName = @v LastName OUTPUT, @o city = @v Citv OUTPUT, ®o State = @v State OUTPUT, ©o Phone = @v Phone OUTPUT IE ©©ROWCOUNT > 0

BEGIN

PRINT Aduplicate record was found : . + fflv FirstNanie + + igiv LastName

PRINin Clty + tate + with a phone number PRINT of + ©v Phone + .

RETURN(5) END

- Конец вложенной процедуры INSERT [BookShopDB].[dbo].[Customers] .(FlrstN;-r- Mг,lP Phone,

Address- Address2. City, State, Zip) VALUES

(©FirstName, ©LastName, ©Phone, ©Addressl, ©Address2, ©City, ©State, ©Zip)

RETURN(SELEC NTITY AS Identity) IE ©©ERROR <> 0

RETURN(4)

GO

Хранимая процедура McateCustomer вложена в процедуру AddCustomer. Начало и конец вложенное елуры помечены комментариями в тексте программы, имена которых начинаются с для хранения значений выход-



1 ... 88 89 90 [ 91 ] 92 93 94 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика