🗊Презентация Оператор insert

Категория: Информатика
Нажмите для полного просмотра!
Оператор insert, слайд №1Оператор insert, слайд №2Оператор insert, слайд №3Оператор insert, слайд №4Оператор insert, слайд №5Оператор insert, слайд №6Оператор insert, слайд №7Оператор insert, слайд №8Оператор insert, слайд №9Оператор insert, слайд №10Оператор insert, слайд №11Оператор insert, слайд №12Оператор insert, слайд №13Оператор insert, слайд №14Оператор insert, слайд №15Оператор insert, слайд №16Оператор insert, слайд №17Оператор insert, слайд №18Оператор insert, слайд №19Оператор insert, слайд №20Оператор insert, слайд №21Оператор insert, слайд №22Оператор insert, слайд №23Оператор insert, слайд №24Оператор insert, слайд №25Оператор insert, слайд №26Оператор insert, слайд №27Оператор insert, слайд №28Оператор insert, слайд №29Оператор insert, слайд №30Оператор insert, слайд №31Оператор insert, слайд №32Оператор insert, слайд №33Оператор insert, слайд №34Оператор insert, слайд №35Оператор insert, слайд №36Оператор insert, слайд №37Оператор insert, слайд №38Оператор insert, слайд №39Оператор insert, слайд №40Оператор insert, слайд №41Оператор insert, слайд №42Оператор insert, слайд №43Оператор insert, слайд №44Оператор insert, слайд №45Оператор insert, слайд №46Оператор insert, слайд №47Оператор insert, слайд №48Оператор insert, слайд №49Оператор insert, слайд №50Оператор insert, слайд №51Оператор insert, слайд №52Оператор insert, слайд №53Оператор insert, слайд №54Оператор insert, слайд №55Оператор insert, слайд №56Оператор insert, слайд №57Оператор insert, слайд №58Оператор insert, слайд №59

Содержание

Вы можете ознакомиться и скачать презентацию на тему Оператор insert. Доклад-сообщение содержит 59 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Оператор INSERT 
Оператор INSERT 
Оператор INSERT имеет две формы:
1) Вставка одной записи
INSERT [INTO] <имя таблицы>[(список имен полей)]
VALUES (список значений)
Предполагается взаимнооднозначное соответствие между списком имен полей и списком значений, то есть k-му полю соответствует k-е значение.
Например:
INSERT INTO Tovar(TovarName, IsTovar, Parent_ID)
VALUES('Макаронные изделия', 0, null)
Если список имён полей опущен (не рекомендуется), то подразумевается, что поля следуют в том порядке, определенном операторами CREATE TABLE и ALTER TABLE.
Описание слайда:
Оператор INSERT Оператор INSERT Оператор INSERT имеет две формы: 1) Вставка одной записи INSERT [INTO] <имя таблицы>[(список имен полей)] VALUES (список значений) Предполагается взаимнооднозначное соответствие между списком имен полей и списком значений, то есть k-му полю соответствует k-е значение. Например: INSERT INTO Tovar(TovarName, IsTovar, Parent_ID) VALUES('Макаронные изделия', 0, null) Если список имён полей опущен (не рекомендуется), то подразумевается, что поля следуют в том порядке, определенном операторами CREATE TABLE и ALTER TABLE.

Слайд 2





2) Вставка результата оператора SELECT в таблицу.
2) Вставка результата оператора SELECT в таблицу.
INSERT [INTO] <имя таблицы>[(список имен полей)]
SELECT <список выражений> FROM…
Пример: поместить в таблицу Tovar1 список товаров, ранее покупавшихся организацией с идентификатором Org_ID=14. Предполагается, что таблица Tovar1 уже существует.
INSERT INTO Tovar1(TovarName, IsTovar, Parent_ID)
SELECT TovarName, IsTovar, Parent_ID FROM Tovar 
WHERE Tovar_ID in
    (SELECT Tovar_ID 
     FROM SostNakl, Nakl
     WHERE SostNakl_ID=Nakl.Nakl_ID
       and Nakl.Org_ID=14)
Описание слайда:
2) Вставка результата оператора SELECT в таблицу. 2) Вставка результата оператора SELECT в таблицу. INSERT [INTO] <имя таблицы>[(список имен полей)] SELECT <список выражений> FROM… Пример: поместить в таблицу Tovar1 список товаров, ранее покупавшихся организацией с идентификатором Org_ID=14. Предполагается, что таблица Tovar1 уже существует. INSERT INTO Tovar1(TovarName, IsTovar, Parent_ID) SELECT TovarName, IsTovar, Parent_ID FROM Tovar WHERE Tovar_ID in (SELECT Tovar_ID FROM SostNakl, Nakl WHERE SostNakl_ID=Nakl.Nakl_ID and Nakl.Org_ID=14)

Слайд 3





Вставка значений полей обладающих свойством identity допустима только тогда, когда используется список полей и выполнена установка
Вставка значений полей обладающих свойством identity допустима только тогда, когда используется список полей и выполнена установка
set identity_insert <имя таблицы> on
Описание слайда:
Вставка значений полей обладающих свойством identity допустима только тогда, когда используется список полей и выполнена установка Вставка значений полей обладающих свойством identity допустима только тогда, когда используется список полей и выполнена установка set identity_insert <имя таблицы> on

Слайд 4





Оператор UPDATE
Оператор UPDATE
Оператор UPDATE изменяет значения одного или более полей в существующей записи. 
UPDATE <имя таблицы> SET
   <имя поля> = {<выражение|DEFAULT|NULL>}
   [,<имя поля> = <выражение|DEFAULT|NULL>]...
[FROM <список источников данных>]
[WHERE <логическое выражение>]
Пример 1:
UPDATE Nakl SET
  Dat='20121231',
  Numb=1234
WHERE Nakl_ID=12
Описание слайда:
Оператор UPDATE Оператор UPDATE Оператор UPDATE изменяет значения одного или более полей в существующей записи. UPDATE <имя таблицы> SET <имя поля> = {<выражение|DEFAULT|NULL>} [,<имя поля> = <выражение|DEFAULT|NULL>]... [FROM <список источников данных>] [WHERE <логическое выражение>] Пример 1: UPDATE Nakl SET Dat='20121231', Numb=1234 WHERE Nakl_ID=12

Слайд 5





Пример 1:
Пример 1:
UPDATE Nakl SET
	Dat='20041231',
  	Numb=1234
WHERE Nakl_ID=12
Описание слайда:
Пример 1: Пример 1: UPDATE Nakl SET Dat='20041231', Numb=1234 WHERE Nakl_ID=12

Слайд 6





Пример 2. 
Пример 2. 
Поступила накладная на приход товара на склад. Значение Nakl_ID=234. Необходимо изменить значение количества товара на складе в связи с этим новым поступлением.
UPDATE Tovar
SET Amount=Tovar.Amount+SostNakl.Amount
FROM Tovar, SostNakl
WHERE Tovar.Tovar_ID=SostNakl.Tovar_ID
  AND Nakl_ID=234
Описание слайда:
Пример 2. Пример 2. Поступила накладная на приход товара на склад. Значение Nakl_ID=234. Необходимо изменить значение количества товара на складе в связи с этим новым поступлением. UPDATE Tovar SET Amount=Tovar.Amount+SostNakl.Amount FROM Tovar, SostNakl WHERE Tovar.Tovar_ID=SostNakl.Tovar_ID AND Nakl_ID=234

Слайд 7





Оператор DELETE
Оператор DELETE
Оператор DELETE удаляет одну или более записей из одной таблицы. 
DELETE FROM <имя таблицы>
WHERE <логическое выражение>
Например:
DELETE FROM SostNakl WHERE Nakl_ID=23456
Описание слайда:
Оператор DELETE Оператор DELETE Оператор DELETE удаляет одну или более записей из одной таблицы. DELETE FROM <имя таблицы> WHERE <логическое выражение> Например: DELETE FROM SostNakl WHERE Nakl_ID=23456

Слайд 8





Оператор TRUNCATE TABLE
Оператор TRUNCATE TABLE
Оператор TRUNCATE удаляет все записи таблицы. 
TRUNCATE TABLE <имя таблицы>
Оператор TRUNCATE TABLE TabName работает много быстрее, чем DELETE FROM TabName, особенно при больших размерах таблицы.
Описание слайда:
Оператор TRUNCATE TABLE Оператор TRUNCATE TABLE Оператор TRUNCATE удаляет все записи таблицы. TRUNCATE TABLE <имя таблицы> Оператор TRUNCATE TABLE TabName работает много быстрее, чем DELETE FROM TabName, особенно при больших размерах таблицы.

Слайд 9





Представления (VIEW)
Представления (VIEW)
Представление (VIEW)  это виртуальная таблица, являющаяся результатом запроса (SELECT) к базе данных. 
Как и обычная таблица, VIEW состоит из строк и именованных столбцов. 
Cодержимое VIEW не хранится постоянно, записи из VIEW порождаются динамически тогда, когда к нему происходит обращение.
Описание слайда:
Представления (VIEW) Представления (VIEW) Представление (VIEW) это виртуальная таблица, являющаяся результатом запроса (SELECT) к базе данных. Как и обычная таблица, VIEW состоит из строк и именованных столбцов. Cодержимое VIEW не хранится постоянно, записи из VIEW порождаются динамически тогда, когда к нему происходит обращение.

Слайд 10





VIEW хранится в базе данных как её объект. 
VIEW хранится в базе данных как её объект. 
VIEW, однажды будучи создано, в дальнейшем может выступать как источник данных в SQL операторах наравне с таблицами (правда, с некоторыми ограничениями).
Описание слайда:
VIEW хранится в базе данных как её объект. VIEW хранится в базе данных как её объект. VIEW, однажды будучи создано, в дальнейшем может выступать как источник данных в SQL операторах наравне с таблицами (правда, с некоторыми ограничениями).

Слайд 11





VIEW  создается оператором CREATE VIEW. Его синтаксис:
VIEW  создается оператором CREATE VIEW. Его синтаксис:
 
CREATE VIEW [ <имя базы данных>.][<имя владельца VIEW>.] 
  <имя VIEW [(список имён полей)] 
[WITH <атрибут VIEW>[,атрибут VIEW] ] 
AS <оператор SELECT> 
[ WITH CHECK OPTION ]
Описание слайда:
VIEW создается оператором CREATE VIEW. Его синтаксис: VIEW создается оператором CREATE VIEW. Его синтаксис:   CREATE VIEW [ <имя базы данных>.][<имя владельца VIEW>.] <имя VIEW [(список имён полей)] [WITH <атрибут VIEW>[,атрибут VIEW] ] AS <оператор SELECT> [ WITH CHECK OPTION ]

Слайд 12





VIEW может иметь атрибуты:
VIEW может иметь атрибуты:
- ENCRYPTION – хранимый в базе данных текст оператора CREATE VIEW будет зашифрован
- SCHEMABINDING – означает, что источники данных, используемые в операторе SELECT не могут быть удалены или модифицированы до тех пор, пока существует VIEW или пока его связь со схемой (SCHEMABINDING) не будет разорвана.
Описание слайда:
VIEW может иметь атрибуты: VIEW может иметь атрибуты: - ENCRYPTION – хранимый в базе данных текст оператора CREATE VIEW будет зашифрован - SCHEMABINDING – означает, что источники данных, используемые в операторе SELECT не могут быть удалены или модифицированы до тех пор, пока существует VIEW или пока его связь со схемой (SCHEMABINDING) не будет разорвана.

Слайд 13





Пример оператора CREATE VIEW:
Пример оператора CREATE VIEW:
CREATE VIEW FirstView AS
SELECT SostNakl_ID, Nakl_ID, Tovar.Tovar_ID,
  TovarName, Tovar.Amount, SostNakl.Price,
  Tovar.IsTovar
FROM Tovar, SostNakl
WHERE Tovar.Tovar_ID=SostNakl.Tovar_ID
 
После того, как такое VIEW создано, мы получаем право обращаться к нему как к таблице, например:
 
SELECT * FROM FirstView WHERE Nakl_ID=456
Описание слайда:
Пример оператора CREATE VIEW: Пример оператора CREATE VIEW: CREATE VIEW FirstView AS SELECT SostNakl_ID, Nakl_ID, Tovar.Tovar_ID, TovarName, Tovar.Amount, SostNakl.Price, Tovar.IsTovar FROM Tovar, SostNakl WHERE Tovar.Tovar_ID=SostNakl.Tovar_ID   После того, как такое VIEW создано, мы получаем право обращаться к нему как к таблице, например:   SELECT * FROM FirstView WHERE Nakl_ID=456

Слайд 14





Как и таблица, VIEW может быть квалифицировано именем базы данных и именем владельца. 
Как и таблица, VIEW может быть квалифицировано именем базы данных и именем владельца. 
Необязательный список имен полей содержит имена столбцов, по которым к ним следует обращаться. Если список имён полей отсутствует, то столбцы получают имена полей, возвращаемых оператором SELECT.
Описание слайда:
Как и таблица, VIEW может быть квалифицировано именем базы данных и именем владельца. Как и таблица, VIEW может быть квалифицировано именем базы данных и именем владельца. Необязательный список имен полей содержит имена столбцов, по которым к ним следует обращаться. Если список имён полей отсутствует, то столбцы получают имена полей, возвращаемых оператором SELECT.

Слайд 15





Если по отношению к VIEW применима какая-нибудь из операций INSERT, UPDATE, DELETE, то VIEW является модифицируемым. Это возможно в следующих случаях:
Если по отношению к VIEW применима какая-нибудь из операций INSERT, UPDATE, DELETE, то VIEW является модифицируемым. Это возможно в следующих случаях:
для VIEW существуют триггеры INSTEAD OF
операторы INSERT или UPDATE изменяют только одну из базовых таблиц, упомянутых во фразе FROM оператора SELECT, составляющего основу VIEW.
- Оператор DELETE применим к VIEW только если фраза FROM ссылается только на одну базовую таблицу
Описание слайда:
Если по отношению к VIEW применима какая-нибудь из операций INSERT, UPDATE, DELETE, то VIEW является модифицируемым. Это возможно в следующих случаях: Если по отношению к VIEW применима какая-нибудь из операций INSERT, UPDATE, DELETE, то VIEW является модифицируемым. Это возможно в следующих случаях: для VIEW существуют триггеры INSTEAD OF операторы INSERT или UPDATE изменяют только одну из базовых таблиц, упомянутых во фразе FROM оператора SELECT, составляющего основу VIEW. - Оператор DELETE применим к VIEW только если фраза FROM ссылается только на одну базовую таблицу

Слайд 16





Пример 1. В результате выполнения следующего оператора будет добавлена одна запись в таблицу Tovar.
Пример 1. В результате выполнения следующего оператора будет добавлена одна запись в таблицу Tovar.
INSERT INTO FirstView(TovarName,IsTovar,Amount) 
VALUES('Яблоки',1,32)
 
Пример 2. К названию товара для уровней классификации добавить символ '?'.
UPDATE FirstView SET TovarName=TovarName+'?' WHERE IsTovar=0
 
Операция DELETE для VIEW FirstView невозможна.
Описание слайда:
Пример 1. В результате выполнения следующего оператора будет добавлена одна запись в таблицу Tovar. Пример 1. В результате выполнения следующего оператора будет добавлена одна запись в таблицу Tovar. INSERT INTO FirstView(TovarName,IsTovar,Amount) VALUES('Яблоки',1,32)   Пример 2. К названию товара для уровней классификации добавить символ '?'. UPDATE FirstView SET TovarName=TovarName+'?' WHERE IsTovar=0   Операция DELETE для VIEW FirstView невозможна.

Слайд 17





Создание VIEW в Enterprise Manager
Создание VIEW в Enterprise Manager
VIEW может быть создано как результат выполнения пакета, так и с помощью построителя запросов в Enterprise Manager (EM). 
Для создания нового VIEW нужно выделить узел дерева View в левой панели EM и выполнить команду New View… контекстного меню. В результате будет вызван диалог построителя запросов:
Описание слайда:
Создание VIEW в Enterprise Manager Создание VIEW в Enterprise Manager VIEW может быть создано как результат выполнения пакета, так и с помощью построителя запросов в Enterprise Manager (EM). Для создания нового VIEW нужно выделить узел дерева View в левой панели EM и выполнить команду New View… контекстного меню. В результате будет вызван диалог построителя запросов:

Слайд 18


Оператор insert, слайд №18
Описание слайда:

Слайд 19





Запрос создается следующим образом. 
Запрос создается следующим образом. 
на верхнюю панель, содержащую диаграмму, поместите таблицы, участвующие в запросе.
перетащите поля таблиц в поля VIEW. 
добавьте сортировку (ORDER BY) и фильтрацию (фраза WHERE), если требуется.
 
Существующее VIEW может быть удалено оператором DROP VIEW:
DROP VIEW <имя VIEW>
Описание слайда:
Запрос создается следующим образом. Запрос создается следующим образом. на верхнюю панель, содержащую диаграмму, поместите таблицы, участвующие в запросе. перетащите поля таблиц в поля VIEW. добавьте сортировку (ORDER BY) и фильтрацию (фраза WHERE), если требуется.   Существующее VIEW может быть удалено оператором DROP VIEW: DROP VIEW <имя VIEW>

Слайд 20





ПОТОК УПРАВЛЕНИЯ
Программные единицы
Программной единицей (модулем) может быть пакет (batch), хранимая процедура (stored procedure), триггер, функция. 
Пакетом называется группа из одного или более операторов Transact SQL, присылаемых клиентским приложением на SQL Server для исполнения. 
Одновременно может быть прислано несколько пакетов; признаком окончания пакета является ключевое слово GO. 
Если некоторый текст содержит единственный пакет, то наличие слова GO необязательно. Слово GO должно быть единственным в строке.
Описание слайда:
ПОТОК УПРАВЛЕНИЯ Программные единицы Программной единицей (модулем) может быть пакет (batch), хранимая процедура (stored procedure), триггер, функция. Пакетом называется группа из одного или более операторов Transact SQL, присылаемых клиентским приложением на SQL Server для исполнения. Одновременно может быть прислано несколько пакетов; признаком окончания пакета является ключевое слово GO. Если некоторый текст содержит единственный пакет, то наличие слова GO необязательно. Слово GO должно быть единственным в строке.

Слайд 21





Например, приведенный ниже текст
Например, приведенный ниже текст
 
DECLARE @x int, @y smallint
SET @x=3
SET @y=@x+5
SELECT @x, @y
go
DECLARE @r int
SET @r=77
SELECT 1,@r
go
 
Содержит два пакета.
Описание слайда:
Например, приведенный ниже текст Например, приведенный ниже текст   DECLARE @x int, @y smallint SET @x=3 SET @y=@x+5 SELECT @x, @y go DECLARE @r int SET @r=77 SELECT 1,@r go   Содержит два пакета.

Слайд 22





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

Слайд 23





SQL Server компилирует пакет в так называемый план исполнения (execution plan). 
SQL Server компилирует пакет в так называемый план исполнения (execution plan). 
Ошибка в процессе компиляции приведёт к тому, что ни один из операторов пакета не будет выполнен. 
Ошибки периода исполнения, например, такие как арифметическое переполнение или нарушение ограничения могут иметь результатом одно из двух:
большинство ошибок останавливают выполнение текущего оператора, последующие операторы не выполняются
некоторые ошибки приводят к невыполнению только оператора, вызвавшего ошибку, остальные операторы пакета выполняются
Описание слайда:
SQL Server компилирует пакет в так называемый план исполнения (execution plan). SQL Server компилирует пакет в так называемый план исполнения (execution plan). Ошибка в процессе компиляции приведёт к тому, что ни один из операторов пакета не будет выполнен. Ошибки периода исполнения, например, такие как арифметическое переполнение или нарушение ограничения могут иметь результатом одно из двух: большинство ошибок останавливают выполнение текущего оператора, последующие операторы не выполняются некоторые ошибки приводят к невыполнению только оператора, вызвавшего ошибку, остальные операторы пакета выполняются

Слайд 24





Действие уже выполненных операторов, предшествующих тому, который вызвал ошибку, сохраняется, за исключением случая, когда группа операторов находится внутри транзакции.
Действие уже выполненных операторов, предшествующих тому, который вызвал ошибку, сохраняется, за исключением случая, когда группа операторов находится внутри транзакции.
Операторы 
CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER и CREATE VIEW 
	могут быть только единственными операторами в пакете. Их нельзя объединять ни с какими другими. Нельзя в одном и том же пакете модифицировать таблицу и использовать ссылки на вновь созданные поля.
Описание слайда:
Действие уже выполненных операторов, предшествующих тому, который вызвал ошибку, сохраняется, за исключением случая, когда группа операторов находится внутри транзакции. Действие уже выполненных операторов, предшествующих тому, который вызвал ошибку, сохраняется, за исключением случая, когда группа операторов находится внутри транзакции. Операторы CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER и CREATE VIEW могут быть только единственными операторами в пакете. Их нельзя объединять ни с какими другими. Нельзя в одном и том же пакете модифицировать таблицу и использовать ссылки на вновь созданные поля.

Слайд 25





В общем случае текст программы на языке Transact SQL состоит из SQL – операторов, операторов потока управления, таких как присваивание, цикла и т.д. и комментариев, которые никак не влияют на исполняемый код. Существует два способа помещения комментариев в текст Transact SQL.
В общем случае текст программы на языке Transact SQL состоит из SQL – операторов, операторов потока управления, таких как присваивание, цикла и т.д. и комментариев, которые никак не влияют на исполняемый код. Существует два способа помещения комментариев в текст Transact SQL.
любой текст в строке программы, который находится вслед за двумя подряд следующими дефисами и до конца строки, является комментарием  -- это комментарий 
любой текст, заключенный между  /* и */ является комментарием
Описание слайда:
В общем случае текст программы на языке Transact SQL состоит из SQL – операторов, операторов потока управления, таких как присваивание, цикла и т.д. и комментариев, которые никак не влияют на исполняемый код. Существует два способа помещения комментариев в текст Transact SQL. В общем случае текст программы на языке Transact SQL состоит из SQL – операторов, операторов потока управления, таких как присваивание, цикла и т.д. и комментариев, которые никак не влияют на исполняемый код. Существует два способа помещения комментариев в текст Transact SQL. любой текст в строке программы, который находится вслед за двумя подряд следующими дефисами и до конца строки, является комментарием -- это комментарий любой текст, заключенный между /* и */ является комментарием

Слайд 26





Переменные
Переменные
Локальные переменные объявляются оператором DECLARE. 
DECLARE <имя переменной> <тип>[,<имя переменной> <тип>]…
Например: DECLARE @x int, @y varchar(30)
Имя переменной всегда начинается с символа '@'. Факторизация типа не допускается: оператор 
DECLARE @x, @z int 
является ошибочным. 
Переменная может быть объявлена в любом месте пакета до её первого использования. 
Область существования переменной – от места объявления и до конца пакета. 
Помещение оператора DECLARE внутри операторных скобок BEGIN, END не приводит к локализации переменной в этом блоке.
Описание слайда:
Переменные Переменные Локальные переменные объявляются оператором DECLARE. DECLARE <имя переменной> <тип>[,<имя переменной> <тип>]… Например: DECLARE @x int, @y varchar(30) Имя переменной всегда начинается с символа '@'. Факторизация типа не допускается: оператор DECLARE @x, @z int является ошибочным. Переменная может быть объявлена в любом месте пакета до её первого использования. Область существования переменной – от места объявления и до конца пакета. Помещение оператора DECLARE внутри операторных скобок BEGIN, END не приводит к локализации переменной в этом блоке.

Слайд 27





Оператор присваивания
Оператор присваивания
SET <имя переменной>=<выражение>
Например,
SET @x=2*@y-1
SET @z=(SELECT Tovar_Name FROM Tovar WHERE Tovar_ID=4)
select @z=Tovar_Name, @w=Tovar_id 
FROM Tovar 
WHERE Tovar_ID=4
Описание слайда:
Оператор присваивания Оператор присваивания SET <имя переменной>=<выражение> Например, SET @x=2*@y-1 SET @z=(SELECT Tovar_Name FROM Tovar WHERE Tovar_ID=4) select @z=Tovar_Name, @w=Tovar_id FROM Tovar WHERE Tovar_ID=4

Слайд 28





Условный оператор (IF)
Условный оператор (IF)
IF <логическое выражение>
	<оператор1 >
[ELSE
	<оператор2 >]
Если логическое выражение имеет значение ИСТИНА, то выполняется оператор1, иначе выполняется оператор2, если он есть.
Описание слайда:
Условный оператор (IF) Условный оператор (IF) IF <логическое выражение> <оператор1 > [ELSE <оператор2 >] Если логическое выражение имеет значение ИСТИНА, то выполняется оператор1, иначе выполняется оператор2, если он есть.

Слайд 29





Группа операторов может быть объединена в составной оператор (блок) с помощью операторных скобок BEGIN и END.
Группа операторов может быть объединена в составной оператор (блок) с помощью операторных скобок BEGIN и END.
Пример:
IF @x>2
	@z=5
ELSE BEGIN
	@z=9
	@x=@z-6
END
Описание слайда:
Группа операторов может быть объединена в составной оператор (блок) с помощью операторных скобок BEGIN и END. Группа операторов может быть объединена в составной оператор (блок) с помощью операторных скобок BEGIN и END. Пример: IF @x>2 @z=5 ELSE BEGIN @z=9 @x=@z-6 END

Слайд 30





Оператор перехода (GOTO)
Оператор перехода (GOTO)
GOTO <метка>
Выполняет переход на указанную метку. Метка – произвольный идентификатор. 
В отличие от идентификаторов локальных переменных он не может начинаться с символа '@'.
Например:
GOTO mmm
…………………………
mmm:
SET @x=12
Метка, на которую передается управление не может находиться за пределами пакета, в котором находится оператор GOTO.
Описание слайда:
Оператор перехода (GOTO) Оператор перехода (GOTO) GOTO <метка> Выполняет переход на указанную метку. Метка – произвольный идентификатор. В отличие от идентификаторов локальных переменных он не может начинаться с символа '@'. Например: GOTO mmm ………………………… mmm: SET @x=12 Метка, на которую передается управление не может находиться за пределами пакета, в котором находится оператор GOTO.

Слайд 31





Оператор цикла
Оператор цикла
Transact SQL располагает единственным типом оператора цикла – while. 
Синтаксис:
WHILE <логическое выражение> <оператор>
Оператор, в частности, может быть блоком. Приведенный ниже пример вычисляет
DECLARE @i int, @S float
SET @i=1
SET @S=0
WHILE @i<=50 BEGIN
	SET @S=@S+1.0/(@i*@i)
	SET @i=@i+1
END
Описание слайда:
Оператор цикла Оператор цикла Transact SQL располагает единственным типом оператора цикла – while. Синтаксис: WHILE <логическое выражение> <оператор> Оператор, в частности, может быть блоком. Приведенный ниже пример вычисляет DECLARE @i int, @S float SET @i=1 SET @S=0 WHILE @i<=50 BEGIN SET @S=@S+1.0/(@i*@i) SET @i=@i+1 END

Слайд 32





Выражение CASE
Выражение CASE
Выражение CASE имеет две формы. Синтаксис первой формы:
CASE <выражение0>
   WHEN <выражение11> THEN <выражение12> 
   [WHEN <выражение21> THEN <выражение22>]…
   [ELSE <else - выражение>] 
END 
Вычисляется выражение0 и его значение поочередно сравнивается с выражениями выражение11, выражение21, …выражениеN1. 
Если будет найдено такое выражение K1, значение которого совпадает с выражение0, то в качестве значения всего выражения CASE будет принято значение выражение K2. 
Если же совпадение не обнаружится, то в качестве значения результата будет принято else – выражение, если оно есть и null, если его нет.
Описание слайда:
Выражение CASE Выражение CASE Выражение CASE имеет две формы. Синтаксис первой формы: CASE <выражение0> WHEN <выражение11> THEN <выражение12> [WHEN <выражение21> THEN <выражение22>]… [ELSE <else - выражение>] END Вычисляется выражение0 и его значение поочередно сравнивается с выражениями выражение11, выражение21, …выражениеN1. Если будет найдено такое выражение K1, значение которого совпадает с выражение0, то в качестве значения всего выражения CASE будет принято значение выражение K2. Если же совпадение не обнаружится, то в качестве значения результата будет принято else – выражение, если оно есть и null, если его нет.

Слайд 33





Например, выражение
Например, выражение
CASE 1
   WHEN 2 THEN 3
   WHEN 4 THEN 8
   ELSE 12
END
равно 12.
Описание слайда:
Например, выражение Например, выражение CASE 1 WHEN 2 THEN 3 WHEN 4 THEN 8 ELSE 12 END равно 12.

Слайд 34





Синтаксис второй формы:
Синтаксис второй формы:
CASE
	WHEN <логическое выражение1> THEN <выражение1>
	[WHEN <логическое выражение N>] THEN <выражениеN>]
	[ELSE else - выражение ] 
END
 
Выражения логическое выражение1, логическое выражения2, … последовательно вычисляются. Как только будет обнаружено первое из них логическое выражениеK, имеющее значение ИСТИНА, в качестве результата всего выражения CASE буде получено значение выражениеK. 
Если все логические выражения имеют значение ЛОЖЬ, то в качестве результата будет взято значение else – выражение, а если фраза ELSE отсутствует, то null.
Описание слайда:
Синтаксис второй формы: Синтаксис второй формы: CASE WHEN <логическое выражение1> THEN <выражение1> [WHEN <логическое выражение N>] THEN <выражениеN>] [ELSE else - выражение ] END   Выражения логическое выражение1, логическое выражения2, … последовательно вычисляются. Как только будет обнаружено первое из них логическое выражениеK, имеющее значение ИСТИНА, в качестве результата всего выражения CASE буде получено значение выражениеK. Если все логические выражения имеют значение ЛОЖЬ, то в качестве результата будет взято значение else – выражение, а если фраза ELSE отсутствует, то null.

Слайд 35





Например, при @x=1 и @y=2, выражение
Например, при @x=1 и @y=2, выражение
CASE 
  WHEN @x<0 THEN 66
  WHEN 2*@x=2 THEN 17
  ELSE 99
END
равно 17.
Описание слайда:
Например, при @x=1 и @y=2, выражение Например, при @x=1 и @y=2, выражение CASE WHEN @x<0 THEN 66 WHEN 2*@x=2 THEN 17 ELSE 99 END равно 17.

Слайд 36





Курсоры
Курсоры
Оператор SELECT возвращает результирующее множество строк. В некоторых случаях может возникнуть необходимость обрабатывать эти строки по одной или блоками. 
Курсор предоставляет возможность перемещаться по результирующему множеству вперед и назад, каждый раз работая с очередной записью.
Курсор представляет собой некоторый ресурс на сервере, который создается оператором DECLARE CURSOR. Его синтаксис:
Описание слайда:
Курсоры Курсоры Оператор SELECT возвращает результирующее множество строк. В некоторых случаях может возникнуть необходимость обрабатывать эти строки по одной или блоками. Курсор предоставляет возможность перемещаться по результирующему множеству вперед и назад, каждый раз работая с очередной записью. Курсор представляет собой некоторый ресурс на сервере, который создается оператором DECLARE CURSOR. Его синтаксис:

Слайд 37





DECLARE CURSOR.
DECLARE CURSOR.
DECLARE <имя курсора> CURSOR 
[ LOCAL | GLOBAL ] 
[ FORWARD_ONLY | SCROLL ] 
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
[ TYPE_WARNING ] 
FOR <оператор SELECT> 
[ FOR UPDATE [ OF <список полей>]]
Описание слайда:
DECLARE CURSOR. DECLARE CURSOR. DECLARE <имя курсора> CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FOR <оператор SELECT> [ FOR UPDATE [ OF <список полей>]]

Слайд 38





имя курсора. 
имя курсора. 
Следует различать понятия курсор и переменная типа курсор. 
Имя курсора не должно начинаться с символа @. 
declare tt cursor for select * from Org
Имя переменной типа курсор должно, как и для других переменных, начинаться с символа @. 
declare @w cursor

В дальнейшем переменной @w можно присвоить значение:
set @w=tt
Описание слайда:
имя курсора. имя курсора. Следует различать понятия курсор и переменная типа курсор. Имя курсора не должно начинаться с символа @. declare tt cursor for select * from Org Имя переменной типа курсор должно, как и для других переменных, начинаться с символа @. declare @w cursor В дальнейшем переменной @w можно присвоить значение: set @w=tt

Слайд 39





LOCAL | GLOBAL. 
LOCAL | GLOBAL. 
LOCAL (локальный) курсор существует только в пределах пакета, процедуры, триггера или функции в которых он объявлен. Такой курсор автоматически уничтожается при выходе из программной единицы (модуля). 
GLOBAL (глобальный курсор) видим всюду в пределах того соединения с базой данных, в котором он создан. Глобальный курсор уничтожается автоматически при закрытии соединения.
Описание слайда:
LOCAL | GLOBAL. LOCAL | GLOBAL. LOCAL (локальный) курсор существует только в пределах пакета, процедуры, триггера или функции в которых он объявлен. Такой курсор автоматически уничтожается при выходе из программной единицы (модуля). GLOBAL (глобальный курсор) видим всюду в пределах того соединения с базой данных, в котором он создан. Глобальный курсор уничтожается автоматически при закрытии соединения.

Слайд 40





FORWARD_ONLY | SCROLL. 
FORWARD_ONLY | SCROLL. 
Курсор FORWARD ONLY способен перемещаться только вперед по набору данных, каждый раз перемещаясь на следующую запись. 
Таким образом, он предназначен для однократного прохода по записям набора.
 Курсор SCROLL может двигаться вперед и назад на произвольное число записей. Операции с курсором FORWARD_ONLY выполняются быстрее, чем с курсором  SCROLL.
Описание слайда:
FORWARD_ONLY | SCROLL. FORWARD_ONLY | SCROLL. Курсор FORWARD ONLY способен перемещаться только вперед по набору данных, каждый раз перемещаясь на следующую запись. Таким образом, он предназначен для однократного прохода по записям набора. Курсор SCROLL может двигаться вперед и назад на произвольное число записей. Операции с курсором FORWARD_ONLY выполняются быстрее, чем с курсором SCROLL.

Слайд 41





STATIC | KEYSET | DYNAMIC | FAST_FORWARD.
STATIC | KEYSET | DYNAMIC | FAST_FORWARD.

STATIC (статический) курсор копирует набор данных, возвращаемый оператором SELECT во временную таблицу в базе данных tempdb и, поэтому, этот вид курсора не может модифицировать данные. 
Изменения данных, происходящие в базе в результате действий других пользователей, для этого типа курсора невидимы.
Описание слайда:
STATIC | KEYSET | DYNAMIC | FAST_FORWARD. STATIC | KEYSET | DYNAMIC | FAST_FORWARD. STATIC (статический) курсор копирует набор данных, возвращаемый оператором SELECT во временную таблицу в базе данных tempdb и, поэтому, этот вид курсора не может модифицировать данные. Изменения данных, происходящие в базе в результате действий других пользователей, для этого типа курсора невидимы.

Слайд 42





KEYSET 
KEYSET 
– тип курсора, управляемый набором ключей. Множество ключей (keyset) записей, возвращаемых оператором SELECT, копируется в таблицу базы данных tempdb. 
При перемещении курсора по записям, данные отыскиваются в основной базе данных по ключам из keyset. 
Отсюда следует, что изменения неключевых полей видимы для курсора, новые записи, добавленные другими пользователями невидимы.
Описание слайда:
KEYSET KEYSET – тип курсора, управляемый набором ключей. Множество ключей (keyset) записей, возвращаемых оператором SELECT, копируется в таблицу базы данных tempdb. При перемещении курсора по записям, данные отыскиваются в основной базе данных по ключам из keyset. Отсюда следует, что изменения неключевых полей видимы для курсора, новые записи, добавленные другими пользователями невидимы.

Слайд 43





Попытка извлечь запись, удалённую другим пользователем, окажется безуспешной. 
Попытка извлечь запись, удалённую другим пользователем, окажется безуспешной. 
Поскольку операция UPDATE выполняется как удаление старой записи и вставка новой, то изменение ключевого поля записи приведет к тому, что прежнюю запись невозможно извлечь, а новая невидима. 
Исключением является случай, когда UPDATE выполняется с использованием фразы WHERE CURRENT OF <курсор>.
Описание слайда:
Попытка извлечь запись, удалённую другим пользователем, окажется безуспешной. Попытка извлечь запись, удалённую другим пользователем, окажется безуспешной. Поскольку операция UPDATE выполняется как удаление старой записи и вставка новой, то изменение ключевого поля записи приведет к тому, что прежнюю запись невозможно извлечь, а новая невидима. Исключением является случай, когда UPDATE выполняется с использованием фразы WHERE CURRENT OF <курсор>.

Слайд 44





DYNAMIC (динамический)
DYNAMIC (динамический)
курсор “видит” все изменения, происходящие с данными.
FAST_FORWARD курсор имеет свойства FORWARD_ONLY, READ_ONLY и оптимизирован по скорости выполнения операций. 
Курсор типа FAST_FORWARD не может иметь свойств SCROLL и FOR_UPDATE. Спецификации FAST_FORWARD и FORWARD_ONLY являются взаимоисключающими.
Описание слайда:
DYNAMIC (динамический) DYNAMIC (динамический) курсор “видит” все изменения, происходящие с данными. FAST_FORWARD курсор имеет свойства FORWARD_ONLY, READ_ONLY и оптимизирован по скорости выполнения операций. Курсор типа FAST_FORWARD не может иметь свойств SCROLL и FOR_UPDATE. Спецификации FAST_FORWARD и FORWARD_ONLY являются взаимоисключающими.

Слайд 45





READ_ONLY | SCROLL_LOCKS | OPTIMISTIC. 
READ_ONLY | SCROLL_LOCKS | OPTIMISTIC. 
Употребление одного из этих ключевых слов определяет намерения пользователя, создающего курсор и влияет на используемые блокировки.
READ_ONLY – курсор создается только для чтения и не будет модифицировать данные, то есть операторы UPDATE и DELETE c фразой CURRENT OF <курсор>, употребляться не будут.
SCROLL_LOCKS – записи курсора блокируются. Таким образом, операции UPDATE или DELETE для текущей записи курсора гарантировано будут успешны.
Описание слайда:
READ_ONLY | SCROLL_LOCKS | OPTIMISTIC. READ_ONLY | SCROLL_LOCKS | OPTIMISTIC. Употребление одного из этих ключевых слов определяет намерения пользователя, создающего курсор и влияет на используемые блокировки. READ_ONLY – курсор создается только для чтения и не будет модифицировать данные, то есть операторы UPDATE и DELETE c фразой CURRENT OF <курсор>, употребляться не будут. SCROLL_LOCKS – записи курсора блокируются. Таким образом, операции UPDATE или DELETE для текущей записи курсора гарантировано будут успешны.

Слайд 46





OPTIMISTIC
OPTIMISTIC
 – предполагает использование “пассивной защиты”. Записи курсора не блокируются. 
При попытке модификации записи курсора выполняется её повторное чтение и, если запись не изменилась с момента чтения её курсором, то модификация выполняется, в противном случае отвергается. 
Вывод о том, что запись изменилась, делается на основании значения поля типа timestamp если оно есть, или на основании контрольной суммы записи, если его нет.
Описание слайда:
OPTIMISTIC OPTIMISTIC – предполагает использование “пассивной защиты”. Записи курсора не блокируются. При попытке модификации записи курсора выполняется её повторное чтение и, если запись не изменилась с момента чтения её курсором, то модификация выполняется, в противном случае отвергается. Вывод о том, что запись изменилась, делается на основании значения поля типа timestamp если оно есть, или на основании контрольной суммы записи, если его нет.

Слайд 47





TYPE_WARNING
TYPE_WARNING
 – сервер может по своему усмотрению изменить свойства курсора, если сочтет, что затребованные характеристики не могут быть удовлетворены. Например, DYNAMIC может быть заменено на KEYSET. 
Указание TYPE_WARNING требует, чтобы пользователь был уведомлен об этом.
Описание слайда:
TYPE_WARNING TYPE_WARNING – сервер может по своему усмотрению изменить свойства курсора, если сочтет, что затребованные характеристики не могут быть удовлетворены. Например, DYNAMIC может быть заменено на KEYSET. Указание TYPE_WARNING требует, чтобы пользователь был уведомлен об этом.

Слайд 48





Оператор DECLARE CURSOR только создает ресурс на сервере, в котором будут размещаться данные курсора, но не читает данные из базы. Наполнение набора данных курсора происходит при выполнении оператора OPEN.
Оператор DECLARE CURSOR только создает ресурс на сервере, в котором будут размещаться данные курсора, но не читает данные из базы. Наполнение набора данных курсора происходит при выполнении оператора OPEN.
OPEN {{[GLOBAL] <имя курсора>}|
  <имя переменной типа курсор>}
Наличие ключевого слова GLOBAL указывает, что происходит обращение к глобальному курсору.
Описание слайда:
Оператор DECLARE CURSOR только создает ресурс на сервере, в котором будут размещаться данные курсора, но не читает данные из базы. Наполнение набора данных курсора происходит при выполнении оператора OPEN. Оператор DECLARE CURSOR только создает ресурс на сервере, в котором будут размещаться данные курсора, но не читает данные из базы. Наполнение набора данных курсора происходит при выполнении оператора OPEN. OPEN {{[GLOBAL] <имя курсора>}| <имя переменной типа курсор>} Наличие ключевого слова GLOBAL указывает, что происходит обращение к глобальному курсору.

Слайд 49





Функция @@CURSOR_ROWS возвращает число записей в последнем открытом соединением курсоре. 
Функция @@CURSOR_ROWS возвращает число записей в последнем открытом соединением курсоре. 
После открытия курсор позиционируется в “щели” (crack) перед первой записью курсора так, что последующий оператор чтения FETCH NEXT прочитает первую запись. 
Понятие “щель” означает позицию курсора на месте несуществующей записи – перед первой, после последней или в позиции удаленной записи.
Описание слайда:
Функция @@CURSOR_ROWS возвращает число записей в последнем открытом соединением курсоре. Функция @@CURSOR_ROWS возвращает число записей в последнем открытом соединением курсоре. После открытия курсор позиционируется в “щели” (crack) перед первой записью курсора так, что последующий оператор чтения FETCH NEXT прочитает первую запись. Понятие “щель” означает позицию курсора на месте несуществующей записи – перед первой, после последней или в позиции удаленной записи.

Слайд 50





FETCH
FETCH
FETCH 
    [[NEXT|PRIOR|FIRST|LAST|
    ABSOLUTE{<номер записи>|
      <переменная, содержащая номер записи>}|
    RELATIVE{<номер записи>|
      <переменная, содержащая номер записи>}]
FROM{{[GLOBAL ]<имя курсора>}|<переменная типа курсор>}
[INTO <список переменных>]
Описание слайда:
FETCH FETCH FETCH [[NEXT|PRIOR|FIRST|LAST| ABSOLUTE{<номер записи>| <переменная, содержащая номер записи>}| RELATIVE{<номер записи>| <переменная, содержащая номер записи>}] FROM{{[GLOBAL ]<имя курсора>}|<переменная типа курсор>} [INTO <список переменных>]

Слайд 51





Declare  ps cursor for
Declare  ps cursor for
Select a, b, c from….
……………………………….
Declare @a int, @b  char(11), @ss datetime
………………………………..
Fetch next from ps into @a, @b, @ss
Описание слайда:
Declare ps cursor for Declare ps cursor for Select a, b, c from…. ………………………………. Declare @a int, @b char(11), @ss datetime ……………………………….. Fetch next from ps into @a, @b, @ss

Слайд 52





FROM – указывает курсор из которого выполняется чтение.
FROM – указывает курсор из которого выполняется чтение.
INTO <список переменных> - указывает в какие переменные следует поместить поля считанной записи. Порядок и число переменных в операторе FETCH должны соответствовать порядку и числу полей оператора SELECT в объявлении курсора. 
Типы данных полей и переменных должны совпадать или допускать неявное преобразование одного типа в другой.
Описание слайда:
FROM – указывает курсор из которого выполняется чтение. FROM – указывает курсор из которого выполняется чтение. INTO <список переменных> - указывает в какие переменные следует поместить поля считанной записи. Порядок и число переменных в операторе FETCH должны соответствовать порядку и числу полей оператора SELECT в объявлении курсора. Типы данных полей и переменных должны совпадать или допускать неявное преобразование одного типа в другой.

Слайд 53





Если курсор открыт как FORWARD_ONLY или FAST_FORWARD то единственной допустимой операцией для него является FETCH NEXT.
Если курсор открыт как FORWARD_ONLY или FAST_FORWARD то единственной допустимой операцией для него является FETCH NEXT.
Функция @@FETCH_STATUS  возвращает успешность выполнения последнего оператора FETCH в соединении:
0 – операция выполнена успешно
1 – операцию выполнить не удалось или запись находится за пределами набора
2 – читаемая запись не существует
Описание слайда:
Если курсор открыт как FORWARD_ONLY или FAST_FORWARD то единственной допустимой операцией для него является FETCH NEXT. Если курсор открыт как FORWARD_ONLY или FAST_FORWARD то единственной допустимой операцией для него является FETCH NEXT. Функция @@FETCH_STATUS возвращает успешность выполнения последнего оператора FETCH в соединении: 0 – операция выполнена успешно 1 – операцию выполнить не удалось или запись находится за пределами набора 2 – читаемая запись не существует

Слайд 54





После того, как работа с данными курсора завершена, его следует закрыть с помощью оператора CLOSE. 
После того, как работа с данными курсора завершена, его следует закрыть с помощью оператора CLOSE. 
CLOSE{{[GLOBAL]<имя курсора>}|<имя переменной типа курсор>}
 
Оператор CLOSE закрывает курсор, но не освобождает ресурсы с ним связанные. Освобождение ресурсов выполняется оператором DEALLOCATE:
DEALLOCATE{{[GLOBAL ]<имя курсора>}|<имя переменной типа курсор>}
Описание слайда:
После того, как работа с данными курсора завершена, его следует закрыть с помощью оператора CLOSE. После того, как работа с данными курсора завершена, его следует закрыть с помощью оператора CLOSE. CLOSE{{[GLOBAL]<имя курсора>}|<имя переменной типа курсор>}   Оператор CLOSE закрывает курсор, но не освобождает ресурсы с ним связанные. Освобождение ресурсов выполняется оператором DEALLOCATE: DEALLOCATE{{[GLOBAL ]<имя курсора>}|<имя переменной типа курсор>}

Слайд 55





В накладных, поступивших от организации 'НИИЧАВО' в марте 2009 г. все цены, превышающие 2000р. увеличить на 20%. Заметим, что задача легко решается и без применения курсора.
В накладных, поступивших от организации 'НИИЧАВО' в марте 2009 г. все цены, превышающие 2000р. увеличить на 20%. Заметим, что задача легко решается и без применения курсора.
DECLARE @SostNakl_ID int, @Price smallmoney
DECLARE ps cursor FORWARD_ONLY STATIC
FOR 
    SELECT SostNakl_ID, Price
    FROM SostNakl, Nakl, Org
    WHERE SostNakl.Nakl_ID=Nakl.Nakl_ID
        AND Nakl.Org_ID=Org.Org_ID
        AND Org.OrgName='НИИЧАВО'
        AND month(Nakl.Dat)=3 AND year(Nakl.Dat)=2009
        AND Nakl.InOut='+'
Описание слайда:
В накладных, поступивших от организации 'НИИЧАВО' в марте 2009 г. все цены, превышающие 2000р. увеличить на 20%. Заметим, что задача легко решается и без применения курсора. В накладных, поступивших от организации 'НИИЧАВО' в марте 2009 г. все цены, превышающие 2000р. увеличить на 20%. Заметим, что задача легко решается и без применения курсора. DECLARE @SostNakl_ID int, @Price smallmoney DECLARE ps cursor FORWARD_ONLY STATIC FOR SELECT SostNakl_ID, Price FROM SostNakl, Nakl, Org WHERE SostNakl.Nakl_ID=Nakl.Nakl_ID AND Nakl.Org_ID=Org.Org_ID AND Org.OrgName='НИИЧАВО' AND month(Nakl.Dat)=3 AND year(Nakl.Dat)=2009 AND Nakl.InOut='+'

Слайд 56





OPEN ps
OPEN ps
FETCH NEXT FROM ps into @SostNakl_ID, @Price
WHILE @@FETCH_STATUS=0 BEGIN
    IF @Price>2000 BEGIN
        UPDATE SostNakl SET Price=1.2*Price
        WHERE SostNakl_ID=@SostNakl_ID
    END
    FETCH NEXT FROM ps into @SostNakl_ID, @Price
END
CLOSE ps
DEALLOCATE ps
Описание слайда:
OPEN ps OPEN ps FETCH NEXT FROM ps into @SostNakl_ID, @Price WHILE @@FETCH_STATUS=0 BEGIN IF @Price>2000 BEGIN UPDATE SostNakl SET Price=1.2*Price WHERE SostNakl_ID=@SostNakl_ID END FETCH NEXT FROM ps into @SostNakl_ID, @Price END CLOSE ps DEALLOCATE ps

Слайд 57





-- а это правильнее
-- а это правильнее
DECLARE @SostNakl_ID int, @Price smallmoney
DECLARE ps cursor FORWARD_ONLY STATIC
FOR 
    SELECT SostNakl_ID, Price
    FROM SostNakl, Nakl, Org
    WHERE SostNakl.Nakl_ID=Nakl.Nakl_ID
        AND Nakl.Org_ID=Org.Org_ID
        AND Org.OrgName='НИИЧАВО'
        AND month(Nakl.Dat)=3 AND year(Nakl.Dat)=2009
        AND Nakl.InOut='+'
OPEN ps
WHILE  1=1 begin
	FETCH NEXT FROM ps into @SostNakl_ID, @Price
	if @@FETCH_STATUS!=0 break
	IF @Price>2000 BEGIN
		UPDATE SostNakl SET Price=1.2*Price WHERE SostNakl_ID=@SostNakl_ID
      END
END
CLOSE ps
DEALLOCATE ps
Описание слайда:
-- а это правильнее -- а это правильнее DECLARE @SostNakl_ID int, @Price smallmoney DECLARE ps cursor FORWARD_ONLY STATIC FOR SELECT SostNakl_ID, Price FROM SostNakl, Nakl, Org WHERE SostNakl.Nakl_ID=Nakl.Nakl_ID AND Nakl.Org_ID=Org.Org_ID AND Org.OrgName='НИИЧАВО' AND month(Nakl.Dat)=3 AND year(Nakl.Dat)=2009 AND Nakl.InOut='+' OPEN ps WHILE 1=1 begin FETCH NEXT FROM ps into @SostNakl_ID, @Price if @@FETCH_STATUS!=0 break IF @Price>2000 BEGIN UPDATE SostNakl SET Price=1.2*Price WHERE SostNakl_ID=@SostNakl_ID END END CLOSE ps DEALLOCATE ps

Слайд 58





Пример 2 (фраза WHERE CURRENT OF..)
Пример 2 (фраза WHERE CURRENT OF..)
Все телефоны организаций, начинающиеся на '63' заменить на ’263…’
DECLARE @Phone varchar(20)
DECLARE ps CURSOR FORWARD_ONLY FOR
    SELECT Phone FROM Org
OPEN ps
FETCH NEXT FROM ps into @Phone
WHILE @@fetch_status=0 BEGIN
    if @Phone like '63%' BEGIN
        UPDATE Org SET Phone='263'+substring(@Phone,3,20)         	WHERE CURRENT OF ps
    END
    FETCH NEXT FROM ps into @Phone
END
CLOSE ps
DEALLOCATE ps
Описание слайда:
Пример 2 (фраза WHERE CURRENT OF..) Пример 2 (фраза WHERE CURRENT OF..) Все телефоны организаций, начинающиеся на '63' заменить на ’263…’ DECLARE @Phone varchar(20) DECLARE ps CURSOR FORWARD_ONLY FOR SELECT Phone FROM Org OPEN ps FETCH NEXT FROM ps into @Phone WHILE @@fetch_status=0 BEGIN if @Phone like '63%' BEGIN UPDATE Org SET Phone='263'+substring(@Phone,3,20) WHERE CURRENT OF ps END FETCH NEXT FROM ps into @Phone END CLOSE ps DEALLOCATE ps

Слайд 59





TRY…CATCH
TRY…CATCH
Конструкция TRY…CATCH обеспечивает перехват и обработку исключительных ситуаций, подобно тому, как это делается в C++. 
Группа операторов Transact SQL помещается в блок TRY. Если внутри этого блока в период исполнения происходит ошибка, то управление будет передано в блок CATCH.
 
BEGIN TRY
    --SQL - операторы
END TRY
BEGIN CATCH
    --SQL - операторы
END CATCH
[ ; ]
Описание слайда:
TRY…CATCH TRY…CATCH Конструкция TRY…CATCH обеспечивает перехват и обработку исключительных ситуаций, подобно тому, как это делается в C++. Группа операторов Transact SQL помещается в блок TRY. Если внутри этого блока в период исполнения происходит ошибка, то управление будет передано в блок CATCH.   BEGIN TRY     --SQL - операторы END TRY BEGIN CATCH --SQL - операторы END CATCH [ ; ]



Похожие презентации
Mypresentation.ru
Загрузить презентацию