Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Процедуры и функции

Содержание

Для реализации логики приложения на стороне базы данныхСоздание хранимых процедур и функцийСоздание триггеров
Процедуры и функции Для реализации логики приложения на стороне базы данныхСоздание хранимых процедур и функцийСоздание триггеров Вызов встроенной функцииSELECT SQRT(5) Преобразование типов данныхCAST ( expression AS data_type [ ( length ) ПримерыCAST (expression AS data_type [ (length ) ] )select cast('12' as int)+45 Код символаSelect ASCII('A'), ASCII('a') 97  65select CHAR(98) Bselect CHAR(ASCII('B')+2) D ГруппировкаBEGIN   {   sql_statement | statement_block   } END Условный операторIF Boolean_expression { sql_statement | statement_block }   [ ELSE МеткиОпределение метки: label: Переход:GOTO label Оператор циклWHILE Boolean_expression   { sql_statement | statement_block | BREAK | Выражение CASESELECT  ProductNumber, Category =   CASE ProductLine Выражение CASESELECT a,  CASE    WHEN a = 1 Обработка исключенийCREATE TABLE dbo.TestRethrow(  ID INT PRIMARY KEY);BEGIN TRY  INSERT ПроцедурыХранимая процедура – это набор операторов T-SQL, который компилируется системой SQL Server в единый ПеременныеDECLARE @var_name var_type, …SET @var_name = var_value;SELECT @var_name; ПроцедурыCREATE PROC [ EDURE ] procedure_name      [ { @parameter data_type } Создание простой процедурыCREATE PROCEDURE SimpleProc ASUPDATE TOP (5) students  SET salary=salary*1.5; Изменение простой процедурыALTER PROCEDURE SimpleProc ASUPDATE TOP (5) students  SET salary=salary*1.5; Создание процедуры с удалениемIF OBJECT_ID (' SimpleProc ') IS NOT NULLDROP PROCEDURE Процедуры: несколько действийCREATE PROCEDURE ExampleProc ASBEGIN	DECLARE @default_salary INT	SET @default_salary = (SELECT …)END Создание процедуры с параметрамиCREATE PROCEDURE ExampleProc (	@id INT,	@name VARCHAR(32)) ASBEGIN	DECLARE @default_salary INT	SET @salary = (SELECT …)END Вызов процедурБез параметров EXECUTE SimpleProc  EXEC SimpleProcС параметрами EXECUTE ExampleProc 1, ‘string’ Параметры  по умолчанию и внешниеCREATE PROCEDURE ExampleProc (	@id INT = 0,	@name Создание процедуры с параметрамиCREATE PROCEDURE GetUnitPrice @prod_id int, @unit_price money OUTPUT ПеременныеCREATE PROCEDURE ExampleProc (	@salary INT OUTPUT,	@id INT = 0,	@name VARCHAR(32) = '',	DECLARE ПеременныеCREATE PROCEDURE ExampleProc (	@id INT = 0,	@name VARCHAR(32) = '',	@salary INT OUTPUTEXEC Процедура с цикломCREATE TABLE mytable (  column1 int,  column2 char(10) Процедура с цикломEXECUTE InsertRows 1 GOSELECT * FROM mytablecolumn1 column2  ----------------------- Выход из процедуры RETURNCREATE PROCEDURE GetUnitPrice  @prod_id int = NULL SELECT-выражения в блокахДолжны возвращать только одно значение!SET var_name = (SELECT column_name FROM КурсорыDECLARE – создание или объявление курсора ;OPEN – открытие курсора, т.е. наполнение его данными;FETCH – выборка из курсора и Создание курсора	DECLARE имя_курсора [INSENSITIVE][SCROLL] CURSOR FOR SELECT_оператор  [FOR { READ_ONLY | UPDATE  [OF имя_столбца[,...n]]}] КурсорыDECLARE cursor_name CURSOR FOR select_statementOPEN cursor_nameFETCH [NEXT] cursor_name [INTO variable_list]CLOSE cursor_nameDEALLOCATE cursor_name Виды курсоров последовательные прокручиваемыеСтатические Динамические Статический курсорВ схеме со статическим курсором информация читается из базы данных один раз и Создаем статический курсорDECLARE cursor_name  INSENSITIVE [ SCROLL ] CURSOR FOR select_statement  Динамический курсорДинамические курсоры - это противоположность статических курсоров. Динамические курсоры отражают все Создаем динамический курсорDECLARE cursor_name  [ SCROLL ] CURSOR FOR select_statement [ FOR { READ ONLY | DECLARE employee_cursor CURSOR FORSELECT id, name FROM employeeDECLARE @emp_id INT, @emp_name VARCHAR(32)OPEN DECLARE Employee_Cursor CURSOR FORSELECT EmployeeID, Title FROM AdventureWorks2012.HumanResources.EmployeeWHERE JobTitle = 'Marketing Specialist';OPEN Прокручиваемый курсорDECLARE cursor_name [INSENSITIVE]  SCROLL CURSOR  FOR select_statement  SCROLL – свобода для FETCHFETCH     [ Курсоры: усложнимDECLARE cursor_name  [ SCROLL ] CURSOR  FOR select_statement   FOR UPDATE [ OF column_name [ ,...n ] Курсор – это почти всегда дополнительные ресурсы сервера и резкое падение производительности
Слайды презентации

Слайд 2 Для реализации логики приложения на стороне базы данных
Создание

Для реализации логики приложения на стороне базы данныхСоздание хранимых процедур и функцийСоздание триггеров

хранимых процедур и функций
Создание триггеров


Слайд 4 Вызов встроенной функции
SELECT SQRT(5)

Вызов встроенной функцииSELECT SQRT(5)

Слайд 5 Преобразование типов данных
CAST ( expression AS data_type

Преобразование типов данныхCAST ( expression AS data_type [ ( length

[ ( length ) ] )
CAST ( $10.50 AS

VARCHAR(10) )

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
CONVERT(VARCHAR(12), GETDATE(), 1)

'2'+4

Слайд 6 Примеры
CAST (expression AS data_type [ (length ) ]

ПримерыCAST (expression AS data_type [ (length ) ] )select cast('12' as

)

select cast('12' as int)+45 57
select cast(27 as char(2))+'R‘ 27R
select cast(27 as

char(1))+'R‘ *R


Слайд 7 Код символа
Select ASCII('A'), ASCII('a') 97 65
select CHAR(98) B
select CHAR(ASCII('B')+2) D

Код символаSelect ASCII('A'), ASCII('a') 97 65select CHAR(98) Bselect CHAR(ASCII('B')+2) D

Слайд 8 Группировка
BEGIN
{
sql_statement |

ГруппировкаBEGIN  {  sql_statement | statement_block  } END

statement_block
}
END


Слайд 9 Условный оператор
IF Boolean_expression { sql_statement | statement_block }

Условный операторIF Boolean_expression { sql_statement | statement_block }  [ ELSE


[ ELSE { sql_statement | statement_block }

]

Слайд 10 Метки
Определение метки:
label:
Переход:
GOTO label

МеткиОпределение метки: label: Переход:GOTO label

Слайд 11 Оператор цикл
WHILE Boolean_expression
{ sql_statement

Оператор циклWHILE Boolean_expression  { sql_statement | statement_block | BREAK |

| statement_block | BREAK | CONTINUE }

BREAK
Приводит к

выходу из ближайшего цикла WHILE.
CONTINUE
Выполняет цикл WHILE для перезагрузки, не учитывая все инструкции, следующие после ключевого слова CONTINUE.

Слайд 12 Выражение CASE
SELECT ProductNumber, Category =

Выражение CASESELECT ProductNumber, Category =  CASE ProductLine   WHEN

CASE ProductLine
WHEN 'R' THEN

'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END,
Name
FROM Production.Product
ORDER BY ProductNumber;

Слайд 13 Выражение CASE
SELECT a,
CASE

Выражение CASESELECT a,  CASE  WHEN a = 1 THEN

WHEN a = 1 THEN b

WHEN a=2 THEN c
WHEN a>2 THEN b+c
END
FROM t2


Слайд 14 Обработка исключений
CREATE TABLE dbo.TestRethrow
( ID INT PRIMARY

Обработка исключенийCREATE TABLE dbo.TestRethrow( ID INT PRIMARY KEY);BEGIN TRY INSERT dbo.TestRethrow(ID)

KEY);

BEGIN TRY
INSERT dbo.TestRethrow(ID) VALUES(1);
-- Force error 2627,

Violation of PRIMARY KEY constraint to be raised.
INSERT dbo.TestRethrow(ID) VALUES(1);
END TRY
BEGIN CATCH
PRINT 'In catch block.';
THROW;
END CATCH;

Слайд 15 Процедуры
Хранимая процедура – это набор операторов T-SQL, который компилируется

ПроцедурыХранимая процедура – это набор операторов T-SQL, который компилируется системой SQL Server в единый

системой SQL Server в единый "план исполнения". 


Слайд 16 Переменные
DECLARE @var_name var_type, …

SET @var_name = var_value;

SELECT @var_name;

ПеременныеDECLARE @var_name var_type, …SET @var_name = var_value;SELECT @var_name;




Слайд 17 Процедуры
CREATE PROC [ EDURE ] procedure_name     [ {

ПроцедурыCREATE PROC [ EDURE ] procedure_name     [ { @parameter data_type }

@parameter data_type }          [ = default ] [

OUTPUT ]     ] [ ,...n ]
AS sql_statement

Слайд 18 Создание простой процедуры
CREATE PROCEDURE SimpleProc AS
UPDATE TOP (5)

Создание простой процедурыCREATE PROCEDURE SimpleProc ASUPDATE TOP (5) students SET salary=salary*1.5;

students
SET salary=salary*1.5;



Слайд 19 Изменение простой процедуры
ALTER PROCEDURE SimpleProc AS
UPDATE TOP (5)

Изменение простой процедурыALTER PROCEDURE SimpleProc ASUPDATE TOP (5) students SET salary=salary*1.5;

students
SET salary=salary*1.5;



Слайд 20 Создание процедуры с удалением
IF OBJECT_ID (' SimpleProc ')

Создание процедуры с удалениемIF OBJECT_ID (' SimpleProc ') IS NOT NULLDROP

IS NOT NULL
DROP PROCEDURE SimpleProc;

CREATE PROCEDURE SimpleProc AS
UPDATE students

SET salary=salary*1.5;



Слайд 21 Процедуры: несколько действий
CREATE PROCEDURE ExampleProc AS
BEGIN
DECLARE @default_salary INT
SET

Процедуры: несколько действийCREATE PROCEDURE ExampleProc ASBEGIN	DECLARE @default_salary INT	SET @default_salary = (SELECT …)END

@default_salary = (SELECT …)
END


Слайд 22 Создание процедуры с параметрами
CREATE PROCEDURE ExampleProc (
@id INT,
@name

Создание процедуры с параметрамиCREATE PROCEDURE ExampleProc (	@id INT,	@name VARCHAR(32)) ASBEGIN	DECLARE @default_salary INT	SET @salary = (SELECT …)END

VARCHAR(32)
) AS
BEGIN
DECLARE @default_salary INT
SET @salary = (SELECT …)
END


Слайд 23 Вызов процедур
Без параметров EXECUTE SimpleProc EXEC SimpleProc
С параметрами EXECUTE ExampleProc

Вызов процедурБез параметров EXECUTE SimpleProc EXEC SimpleProcС параметрами EXECUTE ExampleProc 1, ‘string’

1, ‘string’


Слайд 24 Параметры по умолчанию и внешние
CREATE PROCEDURE ExampleProc (
@id

Параметры по умолчанию и внешниеCREATE PROCEDURE ExampleProc (	@id INT = 0,	@name

INT = 0,
@name VARCHAR(32) = '',
@salary INT OUTPUT
) AS
BEGIN
DECLARE

@default_salary INT
SET @salary = (SELECT …)
END


Слайд 25 Создание процедуры с параметрами
CREATE PROCEDURE GetUnitPrice @prod_id int,

Создание процедуры с параметрамиCREATE PROCEDURE GetUnitPrice @prod_id int, @unit_price money OUTPUT

@unit_price money OUTPUT AS SELECT @unit_price = UnitPrice FROM

Products WHERE ProductID = @prod_id

DECLARE @price money
EXECUTE GetUnitPrice 77, @price OUTPUT
SELECT @price

Слайд 26 Переменные
CREATE PROCEDURE ExampleProc (
@salary INT OUTPUT,
@id INT =

ПеременныеCREATE PROCEDURE ExampleProc (	@salary INT OUTPUT,	@id INT = 0,	@name VARCHAR(32) =

0,
@name VARCHAR(32) = '',


DECLARE @s int;
EXEC ExampleProc @s OUTPUT,

3, ‘any_string‘
EXEC ExampleProc @s OUTPUT

Слайд 27 Переменные
CREATE PROCEDURE ExampleProc (
@id INT = 0,
@name VARCHAR(32)

ПеременныеCREATE PROCEDURE ExampleProc (	@id INT = 0,	@name VARCHAR(32) = '',	@salary INT

= '',
@salary INT OUTPUT

EXEC PROCEDURE ExampleProc 3
DECLARE @proc_name

varchar(30) SET @proc_name = 'sp_who' EXEC @proc_name

Слайд 28 Процедура с циклом
CREATE TABLE mytable ( column1 int,

Процедура с цикломCREATE TABLE mytable ( column1 int, column2 char(10) )

column2 char(10) )
CREATE PROCEDURE InsertRows @start_value int AS BEGIN

DECLARE @loop_counter int, @start int SET @start = @start_value – 1 SET @loop_counter = 0 WHILE (@loop_counter < 5) BEGIN INSERT INTO mytable VALUES (@start + 1, ‘new row’) PRINT (@start) SET @start = @start + 1 SET @loop_counter = @loop_counter + 1 END END


Слайд 29 Процедура с циклом
EXECUTE InsertRows 1 GO
SELECT * FROM

Процедура с цикломEXECUTE InsertRows 1 GOSELECT * FROM mytablecolumn1 column2 -----------------------

mytable
column1 column2 ----------------------- 1 new row 2 new row

3 new row 4 new row 5 new row


Слайд 30 Выход из процедуры RETURN
CREATE PROCEDURE GetUnitPrice @prod_id int

Выход из процедуры RETURNCREATE PROCEDURE GetUnitPrice @prod_id int = NULL AS

= NULL AS IF @prod_id IS NULL BEGIN PRINT

‘Enter a product ID number’ RETURN END ELSE …

Слайд 31 SELECT-выражения в блоках
Должны возвращать только одно значение!
SET var_name

SELECT-выражения в блокахДолжны возвращать только одно значение!SET var_name = (SELECT column_name

= (SELECT column_name FROM …)
При необходимости работать со множеством

записей используйте курсор.

Слайд 32 Курсоры
DECLARE – создание или объявление курсора ;
OPEN – открытие курсора, т.е. наполнение его

КурсорыDECLARE – создание или объявление курсора ;OPEN – открытие курсора, т.е. наполнение его данными;FETCH – выборка из курсора

данными;
FETCH – выборка из курсора и изменение строк данных с помощью курсора;
CLOSE – закрытие курсора ;
DEALLOCATE – освобождение

курсора, т.е. удаление курсора как объекта.

Слайд 33 Создание курсора
DECLARE имя_курсора [INSENSITIVE][SCROLL] CURSOR FOR SELECT_оператор [FOR

Создание курсора	DECLARE имя_курсора [INSENSITIVE][SCROLL] CURSOR FOR SELECT_оператор [FOR { READ_ONLY | UPDATE [OF имя_столбца[,...n]]}]

{ READ_ONLY | UPDATE [OF имя_столбца[,...n]]}]


Слайд 34 Курсоры
DECLARE cursor_name CURSOR FOR select_statement
OPEN cursor_name
FETCH [NEXT] cursor_name

КурсорыDECLARE cursor_name CURSOR FOR select_statementOPEN cursor_nameFETCH [NEXT] cursor_name [INTO variable_list]CLOSE cursor_nameDEALLOCATE cursor_name

[INTO variable_list]
CLOSE cursor_name
DEALLOCATE cursor_name


Слайд 35 Виды курсоров
 последовательные 
прокручиваемые

Статические
Динамические

Виды курсоров последовательные прокручиваемыеСтатические Динамические

Слайд 36 Статический курсор
В схеме со статическим курсором информация читается из базы

Статический курсорВ схеме со статическим курсором информация читается из базы данных один раз

данных один раз и хранится в виде моментального снимка

(по состоянию на некоторый момент времени), поэтому изменения, внесенные в базу данных другим пользователем, не видны. На время открытия курсора сервер устанавливает блокировку на все строки, включенные в его полный результирующий набор. Статический курсор не изменяется после создания и всегда отображает тот набор данных, который существовал на момент его открытия.

Слайд 37 Создаем статический курсор
DECLARE cursor_name  INSENSITIVE [ SCROLL ] CURSOR FOR select_statement 


Создаем статический курсорDECLARE cursor_name  INSENSITIVE [ SCROLL ] CURSOR FOR select_statement 

Слайд 38 Динамический курсор
Динамические курсоры - это противоположность статических курсоров.

Динамический курсорДинамические курсоры - это противоположность статических курсоров. Динамические курсоры отражают

Динамические курсоры отражают все изменения строк в результирующем наборе

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

Слайд 39 Создаем динамический курсор
DECLARE cursor_name  [ SCROLL ] CURSOR FOR select_statement 
[ FOR

Создаем динамический курсорDECLARE cursor_name  [ SCROLL ] CURSOR FOR select_statement [ FOR { READ ONLY

{ READ ONLY | UPDATE [ OF column_name [ ,...n ] ] }

]



Слайд 40 DECLARE employee_cursor CURSOR FOR
SELECT id, name FROM employee
DECLARE

DECLARE employee_cursor CURSOR FORSELECT id, name FROM employeeDECLARE @emp_id INT, @emp_name

@emp_id INT, @emp_name VARCHAR(32)
OPEN employee_cursor
FETCH employee_cursor INTO @emp_id, @emp_name
WHILE

(@@FETCH_STATUS = 0) BEGIN

FETCH employee_cursor INTO @emp_id, @emp_name
END
CLOSE employee_cursor
DEALLOCATE employee_cursor

Последовательный курсор


Слайд 41 DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title
FROM AdventureWorks2012.HumanResources.Employee
WHERE

DECLARE Employee_Cursor CURSOR FORSELECT EmployeeID, Title FROM AdventureWorks2012.HumanResources.EmployeeWHERE JobTitle = 'Marketing

JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS

= 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;

Последовательный курсор


Слайд 42 Прокручиваемый курсор
DECLARE cursor_name [INSENSITIVE] SCROLL CURSOR  FOR select_statement 
SCROLL – свобода для FETCH
FETCH

Прокручиваемый курсорDECLARE cursor_name [INSENSITIVE] SCROLL CURSOR  FOR select_statement  SCROLL – свобода для FETCHFETCH     [

    [ [ NEXT | PRIOR | FIRST | LAST                  |

ABSOLUTE { n | @nvar }                  | RELATIVE { n | @nvar }    ]              FROM         ]   cursor_name    [ INTO @variable_name [ ,...n ] 



Слайд 43 Курсоры: усложним
DECLARE cursor_name  [ SCROLL ] CURSOR  FOR select_statement  FOR UPDATE

Курсоры: усложнимDECLARE cursor_name  [ SCROLL ] CURSOR  FOR select_statement  FOR UPDATE [ OF column_name [ ,...n ]

[ OF column_name [ ,...n ] ] } ]
UPDATE – возможность вносить изменения
FETCH


UPDATE table_name SET id=@id+2 WHERE CURRENT OF cursor_name;
   

  • Имя файла: protsedury-i-funktsii.pptx
  • Количество просмотров: 91
  • Количество скачиваний: 0