Лабораторная работа №7.  Хранимые процедуры и триггеры
Хранимые процедуры Хранимая процедура может иметь параметры, а также может сама возвращать целочисленное значение. Максимальный объем хранимой процедуры – 128МБ. Синтаксис инструкции создания хранимой процедуры таков: CREATE PROC [ EDURE ] имя [;номер][  {@параметр тип_параметра} [ VARYING ] [= по_умолчанию]  [OUTPUT]] [,...n][ WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION }  ] AS предложения  SQL  [... n ]
Создание процедуры в базе данных В программе SQL Query Analyzer можно набрать текст процедуры (как указано выше) и при исполнении запроса она будет создана на сервере. Дальнейшее изменение процедуры производить не вполне удобно (например, для засылки нового текста следует дать команду DROP PROC). Из программы же Entreprise Manager в дереве базы данных можно найти ветку «Stored Procedures», в контекстном меню следует выбрать пункт «New stored procedure», после чего в окне редактирования процедуры появится шаблон текста хранимой процедуры. Кнопка «Check syntax» позволяет проверить текст процедуры до отправки на сервер. После сохранения процедуры на сервере можно редактировать ее, дважды щелкнув на ее имени левой кнопкой мыши (либо выбрав пункт «Properties» в ее контекстном меню).
Средства языка  Transact - SQL Сам язык SQL, хоть и не предназначенный для программирования алгоритмов (он ориентирован на работу с множествами), содержит достаточное количество алгоритмических конструкций, позволяющих писать достаточно сложные процедуры. Локальные переменные: DECLARE @имя_переменной тип_переменной [,...] Имена переменных должны начинаться со знака  @  и должны быть действительными идентификаторами SQL. Присваивания возможны только в инструкции SELECT, например: SELECT @sUserName = ‘Ivan’ Циклы : WHILE  логическое_выражение {предложение} [ BREAK ] {предложение} [ CONTINUE ]
Агрегатные функции   AVG([ALL|DISTINCT] выражение) – среднее значение выражения в множестве MAX([ALL|DISTINCT]выражение) – максимальное значение выражения в множестве MIN([ALL|DISTINCT] выражение) – минимальное значение выражения в множестве SUM([ALL|DISTINCT] выражение) – суммарное значение выражения в множестве COUNT({[ALL|DISTINCT]выражение]|*}) – количество выражений во
Пример простой хранимой процедуры   CREATE PROCEDURE [_DeleteFromList] @i INT AS  IF NOT EXISTS (SELECT [ID] FROM [_lists] WHERE [ID] = @i) RETURN -3 BEGIN TRANSACTION -- Delete items of list DELETE FROM [_listItems] WHERE [ListID] = @i -- Delete groups of list DELETE FROM [_listGroups] WHERE [ListID] = @i -- Delete list header DELETE FROM [_lists] WHERE [ID] = @i COMMIT
Триггеры Триггер – особый вид хранимой процедуры, связанной с определенной таблицей (или представлением) базы данных. Триггер выполняется автоматически при попытке изменения информации в этой таблице. С помощью триггеров можно задавать дополнительные ограничения целостности информации в базе данных и правила поведения данных. Синтаксис оператора создания триггера: CREATE TRIGGER  trigger_name  ON {  table  |  view  }  [ WITH ENCRYPTION ]  [NOT FOR REPLICATION] {      {  {  FOR | INSTEAD OF  }  { [ INSERT ] [  ,  ] [ UPDATE ] [  ,  ] [DELETE] }          AS          [ { IF UPDATE  (  column  )              [ { AND | OR } UPDATE  (  column  )  ]                  [ ... n  ]          } ]           sql_statement  [   ... n  ]

лабраб 7

  • 1.
    Лабораторная работа №7. Хранимые процедуры и триггеры
  • 2.
    Хранимые процедуры Хранимаяпроцедура может иметь параметры, а также может сама возвращать целочисленное значение. Максимальный объем хранимой процедуры – 128МБ. Синтаксис инструкции создания хранимой процедуры таков: CREATE PROC [ EDURE ] имя [;номер][ {@параметр тип_параметра} [ VARYING ] [= по_умолчанию] [OUTPUT]] [,...n][ WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ] AS предложения SQL [... n ]
  • 3.
    Создание процедуры вбазе данных В программе SQL Query Analyzer можно набрать текст процедуры (как указано выше) и при исполнении запроса она будет создана на сервере. Дальнейшее изменение процедуры производить не вполне удобно (например, для засылки нового текста следует дать команду DROP PROC). Из программы же Entreprise Manager в дереве базы данных можно найти ветку «Stored Procedures», в контекстном меню следует выбрать пункт «New stored procedure», после чего в окне редактирования процедуры появится шаблон текста хранимой процедуры. Кнопка «Check syntax» позволяет проверить текст процедуры до отправки на сервер. После сохранения процедуры на сервере можно редактировать ее, дважды щелкнув на ее имени левой кнопкой мыши (либо выбрав пункт «Properties» в ее контекстном меню).
  • 4.
    Средства языка Transact - SQL Сам язык SQL, хоть и не предназначенный для программирования алгоритмов (он ориентирован на работу с множествами), содержит достаточное количество алгоритмических конструкций, позволяющих писать достаточно сложные процедуры. Локальные переменные: DECLARE @имя_переменной тип_переменной [,...] Имена переменных должны начинаться со знака @ и должны быть действительными идентификаторами SQL. Присваивания возможны только в инструкции SELECT, например: SELECT @sUserName = ‘Ivan’ Циклы : WHILE логическое_выражение {предложение} [ BREAK ] {предложение} [ CONTINUE ]
  • 5.
    Агрегатные функции AVG([ALL|DISTINCT] выражение) – среднее значение выражения в множестве MAX([ALL|DISTINCT]выражение) – максимальное значение выражения в множестве MIN([ALL|DISTINCT] выражение) – минимальное значение выражения в множестве SUM([ALL|DISTINCT] выражение) – суммарное значение выражения в множестве COUNT({[ALL|DISTINCT]выражение]|*}) – количество выражений во
  • 6.
    Пример простой хранимойпроцедуры CREATE PROCEDURE [_DeleteFromList] @i INT AS IF NOT EXISTS (SELECT [ID] FROM [_lists] WHERE [ID] = @i) RETURN -3 BEGIN TRANSACTION -- Delete items of list DELETE FROM [_listItems] WHERE [ListID] = @i -- Delete groups of list DELETE FROM [_listGroups] WHERE [ListID] = @i -- Delete list header DELETE FROM [_lists] WHERE [ID] = @i COMMIT
  • 7.
    Триггеры Триггер –особый вид хранимой процедуры, связанной с определенной таблицей (или представлением) базы данных. Триггер выполняется автоматически при попытке изменения информации в этой таблице. С помощью триггеров можно задавать дополнительные ограничения целостности информации в базе данных и правила поведения данных. Синтаксис оператора создания триггера: CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] [NOT FOR REPLICATION] {     { { FOR | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [DELETE] }         AS         [ { IF UPDATE ( column )             [ { AND | OR } UPDATE ( column ) ]                 [ ... n ]         } ]          sql_statement [ ... n ]