Лабораторная работа: Знакомства с MS SQL Server

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Бенин

Порто-Ново

112620

11167000

Африка

Болгария

София

110910

7153784

Европа

Боливия

Сукре

1098580

10985059

Южная Америка

Ботсвана

Габороне

600370

2209208

Африка

Бразилия

Бразилиа

8511965

206081432

Южная Америка

Буркина-Фасо

Уагадугу

274200

19034397

Африка

Бутан

Тхимпху

47000

784000

Азия

Великобритания

Лондон

244820

65341183

Европа

Венгрия

Будапешт

93030

9830485

Европа

Венесуэла

Каракас

912050

31028637

Южная Америка

Восточный Тимор

Дили

14874

1167242

Азия

Вьетнам

Ханой

329560

91713300

Азия

Пример 1: Напишите функцию для вывода столицы данной страны, и вызовите ее:

CREATE FUNCTION Пример1 (

@Страна AS VARCHAR(50)

)

RETURNS VARCHAR(50) AS

BEGIN

DECLARE @S AS VARCHAR(50) SELECT

@S = Столица

FROM

Страны

END

WHERE

Название = @Страна RETURN @S

SELECT dbo.Пример1('Австрия')

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

CREATE FUNCTION Пример2 (

@Площадь AS FLOAT

)

RETURNS FLOAT AS

BEGIN

DECLARE @P AS FLOAT

SET @P = ROUND(@Площадь / 1000, 2) RETURN @P

END

SELECT

Название, Столица, Континент, Население,

dbo.Пример2(Площадь) AS [Площадь тыс.кв.км]

FROM

Страны

Пример 3: Напишите функцию для вычисления плотности населения, и вызовите ее:

CREATE FUNCTION Пример3 (

@Население AS INT, @Площадь AS FLOAT

)

RETURNS FLOAT AS

BEGIN

DECLARE @P AS FLOAT

SET @P = ROUND(CAST(@Население AS FLOAT) / @Площадь, 2) RETURN @P

END

SELECT

Название, Столица, Континент, Население, Площадь,

dbo.Пример3(Население, Площадь) AS Плотность

FROM

Страны

ORDER BY

Плотность DESC

Пример 4: Напишите функцию для поиска страны второй по площади, и вызовите ее: CREATE FUNCTION Пример4()

RETURNS VARCHAR(50) AS

BEGIN

DECLARE @P AS VARCHAR(50) DECLARE @M1 AS FLOAT DECLARE @M2 AS FLOAT

SELECT

@M1 = MAX(Площадь)

FROM

Страны

SELECT

@M2 = MAX(Площадь)

FROM

Страны

WHERE

Площадь < @M1

SELECT

@P = Название

FROM

Страны

WHERE

Площадь = @M2

RETURN @P

END

SELECT

dbo.Пример4() AS [Второй по площади страна]

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

CREATE FUNCTION Пример5 (

@Конт AS VARCHAR(50) = 'Европа'

)

RETURNS VARCHAR(50) AS

BEGIN

DECLARE @P AS VARCHAR(50) DECLARE @M AS FLOAT

SELECT

@M = MIN(Площадь)

FROM

Страны

WHERE

Континент = @Конт

SELECT

@P = Название

FROM

Страны

WHERE

Континент = @Конт AND

Площадь = @M

RETURN @P

END

SELECT

dbo.Пример5('Азия') AS [Наименьшая по площади страна в Азии]

SELECT

dbo.Пример5(DEFAULT) AS [Наименьшая по площади страна в Европе]

Пример 6: Напишите функцию для замены букв в заданном слове от второй до пред- последней на точку, и примените ее для названия страны:

CREATE FUNCTION Пример6 (

@A AS VARCHAR(50)

)

RETURNS VARCHAR(50) AS

BEGIN

RETURN LEFT(@A, 1) + REPLICATE('.', LEN(@A) - 2) + RIGHT(@A, 1)

END

SELECT

dbo.Пример6(Название) AS [Скрытое название]

,Столица

,Континент

,Площадь

,Население

FROM

Страны

Пример 7: Напишите функцию, которая возвращает количество стран, содержащих в названии заданную букву:

CREATE FUNCTION Пример7 (

@C AS CHAR(1)

)

RETURNS INT AS

BEGIN

DECLARE @K AS INT

SELECT

@K = COUNT(*)

FROM

Страны

WHERE

CHARINDEX(@C, Название) > 0

RETURN @K

END

Пример 8: Напишите функцию для вывода списка стран с населением больше задан- ного числа, и вызовите ее:

CREATE FUNCTION Пример8 (

@N AS INT

)

RETURNS TABLE AS

RETURN (

SELECT

Название

,Столица

,Площадь

,Население

,Континент

FROM

Страны

SELECT

*

WHERE

Население > @N

)

FROM

dbo.Пример8(100000000)

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

CREATE FUNCTION Пример9

(

@A AS FLOAT, @B AS FLOAT

)

RETURNS TABLE AS

RETURN (

SELECT

Название

,Столица

,Площадь

,Население

,Континент

FROM

Страны

SELECT

*

WHERE

Площадь BETWEEN @A AND @B

)

FROM

dbo.Пример9(1000, 10000)

Пример 10: Напишите функцию для возврата таблицы с названием страны и плотно- стью населения, и вызовите ее:

CREATE FUNCTION Пример10()

RETURNS @Ст_Плот TABLE

(

Название VARCHAR(50), Плотность FLOAT

)

AS BEGIN

INSERT

@Ст_Плот SELECT

Название

, CAST(Население AS FLOAT) / Площадь AS Плотность

FROM

Страны

RETURN

END

SELECT

Название

,Плотность

FROM

dbo.Пример10()

Пример 11: Удалите функцию из примера 10:

DROP FUNCTION Пример10

Задание

Напишите функцию для вывода названия страны с заданной столицей, и вызовите ее.

Напишите функцию для перевода населения в млн. чел. и вызовите ее.

Напишите функцию для вычисления плотности населения заданной части света и вызовите ее.

Напишите функцию для поиска страны, третьей по населению и вызовите ее.

Напишите функцию для поиска страны с максимальным населением в заданной ча- сти света и вызовите ее. Если часть света не указана, выбрать Азию.

Напишите функцию для замены букв в заданном слове от третьей до предпослед- ней на “тест” и примените ее для столицы страны.

Напишите функцию, которая возвращает количество стран, не содержащих в назва- нии заданную букву.

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

Напишите функцию для возврата списка стран с населением в интервале заданных значений и вызовите ее.

Напишите функцию для возврата таблицы с названием континента и суммарным населением и вызовите ее.

Напишите функцию IsPalindrom(P) целого типа, возвращающую 1, если целый па- раметр P (P > 0) является палиндромом, и 0 в противном случае.

Напишите функцию Quarter(x, y) целого типа, определяющую номер координатной четверти, содержащей точку с ненулевыми вещественными координатами (x, y).

Напишите функцию IsPrime(N) целого типа, возвращающую 1, если целый пара- метр N (N > 1) является простым числом, и 0 в противном случае.

Напишите код для удаления созданных вами функций.

Лабораторная работа 10

Хранимые процедуры

Цель работы

Изучение создания хранимых процедур.

Изучение передачи входных параметров.

Изучение передачи выходных параметров.

Изучение вызовов хранимых процедур.

Изучение удаления хранимых процедур.

Теоретическая часть

При программировании в SQL Server введенный код сначала компилируется, потом за- пускается. Процесс компиляции может занимать определенное время. На языке Transact-SQL также есть возможность написанный блок кода сохранить и заранее скомпилировать. Осо- бенно, если код многократно используется в операции базы данных, отличным решением бу- дет произвести его инкапсуляцию в процедуры. Для этой цели используются хранимые про- цедуры, которые представляют собой набор инструкций, выполняющихся как единое целое. Процедуры аналогичны конструкциям в других языках программирования и выполняют сле- дующие задачи:

обрабатывают входные параметры и возвращают значения в виде выходных парамет- ров;

содержат инструкции, которые выполняют операции в базе данных, в отличии от пользовательских функций;

возвращают сведения об успешном или неуспешном завершении.

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

С точки зрения безопасности, хранимые процедуры выполняют очень большую роль, так как устраняют необходимость предоставлять разрешения на уровне объектов и упрощают формирование уровней безопасности. С помощью хранимых процедур можно предотвратить атаки типа «инъекция SQL».

Хранимая процедура создается с помощью команды CREATE PROCEDURE или CREATE PROC, которая имеет следующий упрощенный вид:

CREATE {PROC | PROCEDURE} <название>

[<@параметр> <тип> [= <значение по умолчанию>] [OUT | OUTPUT]] AS

[BEGIN]

<команды> [END]

При создании процедуры после команды CREATE указывается тип создаваемого объ- екта с помощью ключевого слова PROCEDURE или его сокращенного варианта PROC.

Названия процедур должны соответствовать требованиям, предъявляемым к идентифи- каторам, и должны быть уникальными в базе данных. При этом не следует пользоваться пре- фиксом «sp_». Этим префиксом в SQL Server обозначаются системные процедуры.

В хранимую процедуру можно передать до 2100 параметров. При выполнении проце- дуры значение каждого из объявленных параметров должно быть указано пользователем, если для параметра не определено значение по умолчанию.

Ключевое слово OUT (можно использовать и OUTPUT) показывает, что параметр про- цедуры является выходным.

Для выполнения хранимой процедуры используется ключевое слово EXECUTE (или EXEC). Процедуру также можно вызывать и выполнять без ключевого слова, если она явля- ется первой инструкцией. Синтаксис команды EXECUTE имеет следующий вид:

EXECUTE [<@статус возврата>=] <название процедуры> [<@параметр>=] <значе- ние>| <@переменная> [OUTPUT] | [DEFAULT]

В отличии от вызова функций, при вызове хранимых процедур с указанием названия параметра ([<@параметр>=] <значение>), последовательность параметров можно не соблю- дать.

Для выходных параметров при вызове указывается ключевое слово OUTPUT.

Если для параметра указано значение по умолчанию, можно его использовать с помо- щью ключевого слова DEFAULT.

Для удаления хранимых процедур используется команда DROP PROCEDURE. Упро- щенный синтаксис имеет следующий вид:

DROP PROC | PROCEDURE [IF EXISTS] <название хранимой процедуры>

Ключевые слова IF EXISTS удаляют хранимую процедуру только в том случае, если она уже существует.

Практическая часть

Дана таблица Страны:

Название

Столица

Площадь

Население

Континент

Австрия

Вена

83858

8741753

Европа

Азербайджан

Баку

86600

9705600

Азия

Албания

Тирана

28748

2866026

Европа

Алжир

Алжир

2381740

39813722

Африка

Название

Столица

Площадь

Население

Континент

Ангола

Луанда

1246700

25831000

Африка

Аргентина

Буэнос-Айрес

2766890

43847000

Южная Америка

Афганистан

Кабул

647500

29822848

Азия

Бангладеш

Дакка

144000

160221000

Азия

Бахрейн

Манама

701

1397000

Азия

Белиз

Бельмопан

22966

377968

Северная Америка

Белоруссия

Минск

207595

9498400

Европа

Бельгия

Брюссель

30528

11250585

Европа

Бенин

Порто-Ново

112620

11167000

Африка

Болгария

София

110910

7153784

Европа

Боливия

Сукре

1098580

10985059

Южная Америка

Ботсвана

Габороне

600370

2209208

Африка

Бразилия

Бразилиа

8511965

206081432

Южная Америка

Буркина-Фасо

Уагадугу

274200

19034397

Африка

Бутан

Тхимпху

47000

784000

Азия

Великобритания

Лондон

244820

65341183

Европа

Венгрия

Будапешт

93030

9830485

Европа

Венесуэла

Каракас

912050

31028637

Южная Америка

Восточный Тимор

Дили

14874

1167242

Азия

Вьетнам

Ханой

329560

91713300

Азия

Источник: https://otherreferats.allbest.ru/download/1383510/