Содержание
- 2. Сценарий может состоять из одного или нескольких пакетов.
- 3. Пакет – это набор операторов SQL, одновременно передаваемых SQL –серверу и выполняемых как единая группа. Пакеты
- 4. SQL Server компилирует операторы пакета в единую исполнимую единицу (план исполнения). После этого по очереди выполняются
- 6. Пакеты чаще всего используются для регламентации порядка следования заданий.
- 8. В современной клиент-серверной вычислительной среде приложение взаимодействует с сервером баз данных по схеме, когда приложение отправляет
- 9. Работа такой схеме основывается на использовании так называемого серверного кода (server-side code) - любого кода, выполняемого
- 10. Использование серверного кода значительно сокращает объем сетевого трафика, и тем самым увеличивает производительность базы данных в
- 11. PL/SQL является таким расширением SQL в СУБД Oracle, Transact SQL – в MS SQL Server. Они
- 12. Процедурные расширения SQL описаны в документе SQL/PSM стандарта SQL99. Язык SQL расширен операторами управления CASE, IF,
- 13. Процедурные расширения Поскольку SQL не является языком программирования), вводимые разными производителями расширения касались в первую очередь
- 14. Перечень процедурных расширений для самых популярных СУБД
- 15. Операторы SQL могут выполняться разными способами: по одному, как сценарии, пакетами, в составе хранимых процедур или
- 16. Хранимая процедура - это специальный тип пакета инструкций Transact-SQL Основное различие между пакетом и хранимой процедурой
- 17. Как правило, в работе с БД используются одни и те же запросы, либо набор последовательных запросов.
- 18. Хранимые процедуры могут включать любые операторы SQL, а также некоторый набор операторов, которые управляют ходом выполнения
- 19. С точки зрения приложений, работающих с БД, хранимые процедуры – это подпрограммы, которые выполняются на сервере.
- 20. Одна процедура может быть использована в любом количестве клиентских приложений, что позволяет существенно снизить трудозатраты на
- 21. Обычно все ограничения целостности в виде правил и алгоритмов обработки данных реализуются на сервере баз данных
- 22. Подобный подход делает весьма простой модификацию алгоритмов обработки данных, тотчас же становящихся доступными для всех пользователей
- 24. Хранимые процедуры могут быть активизированы пользовательскими приложениями, другими хранимыми процедурами и триггерами.
- 25. Также как и любые процедуры в стандартных языках программирования, хранимые процедуры могут иметь входные и выходные
- 26. Системные хранимые процедуры хранятся в базе данных master, их имена начинаются с префикса sp_ (sp_helpconstraint, sp_helpindex
- 27. Запускаются хранимые процедуры всех типов с помощью команды EXECUTE, которую можно сократить до ЕХЕС. Например, хранимая
- 28. Временные хранимые процедуры хранятся в базе данных tempdb и удаляются автоматически
- 29. Локальные временные хранимые процедуры могут быть вызваны только из того соединения, в котором созданы. При создании
- 30. Глобальные временные хранимые процедуры доступны для любых соединений сервера. Для определения глобальной временной хранимой процедуры достаточно
- 31. Хранимая процедура после ее создания помещается в кэш процедур. Кэш процедур это пространство памяти, содержащее план
- 32. Для просмотра кода хранимой процедуры служит системная процедура sp_helptext.
- 34. Хранимая процедура компилируется один раз и после этого может выполняться многократно. Такая функциональность повышает производительность, поскольку
- 35. Как серверные программы хранимые процедуры имеют следующие преимущества. Хранимые процедуры хранятся в компилированном виде, поэтому выполняются
- 36. хранимые процедуры проще использовать: они могут состоять из десятков и сотен команд, но для их запуска
- 37. Хранимые процедуры можно рассматривать как важный компонент системы безопасности базы данных. Если все клиенты осуществляют доступ
- 38. Хранимые процедуры скрывают от пользователя структуру базы данных и разрешают ему выполнение только тех операций, которые
- 39. Хранимую процедуру можно создавать в следующем порядке: сначала написать операторы SQL, которые должны быть включены в
- 40. Для передачи входных и выходных данных в создаваемой хранимой процедуре могут использоваться параметры, имена которых, как
- 41. Для создания хранимой процедуры используется оператор SQL CREATE PROCEDURE. Синтаксис: CREATE PROCEDURE (@ , @ …)
- 42. Ключевое слово RECOMPILE определяет режим компиляции. Если RECOMPILE задано, то процедура будет перекомпилироваться всякий раз, когда
- 43. Ключевое слово ENCRYPTION определяет режим, при котором исходный текст хранимой процедуры не сохраняется в БД. Кроме
- 44. Процедуры могут быть процедурами или функциями. Эти понятия трактуются традиционно. В процедуре может быть использовано ключевое
- 45. Выполнение процедуры осуществляется с помощью команды EXEC[UTE] имя процедуры [@параметр = значение]
- 46. Значение параметров задается путем передачи значений по позиции или с заданием ссылок на имена. Передача параметра
- 47. Передача значений без ссылок на имена параметров (передача значений по позиции). Если указываются только значения, их
- 48. Нельзя присвоить параметру значение по умолчанию, просто пропустив его при перечислении. Если требуется опустить параметры, для
- 49. Если вызов хранимой процедуры не является единственной командой в пакете, то присутствие команды EXECUTE обязательно. Эта
- 50. Возврат значений при помощи параметров вывода Для использования параметра вывода ключевое слово OUTPUT должно указываться как
- 51. Процедурные расширения Поскольку SQL не является языком программирования), вводимые разными производителями расширения касались в первую очередь
- 62. Элементы Transact SQL для управления ходом выполнения
- 63. Операторы управления выполнением программы: В процедурах могут использоваться следующие операторы управления: 1. Оператор условия IF BEGIN
- 64. IF (SELECT COUNT(*) FROM STAFF WHERE Position = 'менеджер' ) PRINT 'Недостаточно менеджеров ' ELSE BEGIN
- 65. 2. Выбор одного из нескольких значений CASE WHEN THEN WHEN THEN WHEN THEN … ELSE END
- 66. 3. Циклическое выполнение операций WHILE BEGIN END В этом операторе можно также использовать операторы BREAK и
- 68. Оператор RETURN выполняет безусловный выход из процедуры.
- 69. В программу можно включать комментарии. Однострочные комментарии отделяются от оператора двумя дефисами (--). Многострочные комментарии заключаются
- 70. Для объявления переменных, которые используются в процедуре, служит директива DECLARE. Идентификаторы переменных начинаются с символа @.
- 72. Неправильное использование SET:
- 75. 1) DECLARE @T INTEGER SELECT @T= COUNT(*) FROM Property SELECT @T 2) DECLARE @T INTEGER SET
- 76. Глобальные переменные Обработка ошибок SQL Server позволяет обрабатывать ошибки, используя глобальную переменную @@ERROR. Если генерируется ошибка,
- 78. Недостатки подхода с использованием @@Error Значение переменной @@Error должно быть проверено сразу после выполнения запроса/команды. Так
- 79. @@TRANCOUNT - число незавершённых транзакций IF (@@TRANCOUNT>0) BEGIN RAISERROR (‘задание не может быть выполнено в транзакции’,
- 80. @@ROWCOUNT возвращает количество строк, затронутых (возвращённых, удалённых, изменённых) последним запросом. Например: UPDATE STAFF SET LastName =
- 81. Инструкция RAISERROR возвращает пользовательское сообщение об ошибке, позволяет пользователям получать записи из системной таблицы sysmessages или
- 82. Уровень важности ошибки является указанием на то, какие меры следует принимать с учетом этой ошибки.
- 83. Система обозначений уровней важности ошибок охватывает широкий спектр сообщений об ошибках, включая те, которые являются информационными
- 84. Если необходимо завершить выполнение процедуры и активировать в клиентской программе сообщение, как правило, указывается уровень важности
- 85. Уровень важности ошибки от 0 до 18 может указать любой пользователь. Уровни важности от 19 до
- 86. Состояние - целое число, которое идентифицирует источник сообщения, если оно может генерироваться из нескольких мест в
- 87. Сообщение об ошибке можно стандартизировать и использовать многократно. Для этого сообщение следует определить в БД. Синтаксис
- 88. Флаг FALSE|TRUE определяет, должно ли сообщение записываться в журнал ошибок. REPLACE заменяет существующее сообщение с указанным
- 89. Начиная с SQL Server 2005, появилась возможность обработать исключения, используя операторы try и catch. CREATE PROCEDURE
- 90. Внутри блока CATCH доступны функции для обработки исключений: ERROR_NUMBER() — номер ошибки; ERROR_SEVERITY() — уровень серьезности;
- 91. Конструкция TRY...CATCH перехватывает все ошибки исполнения с кодом серьезности, большим чем 10, которые не закрывают подключение
- 92. Ошибки, обнаруженные в блоке CATCH, не передаются в вызывающее приложение. Если какие-либо сведения об ошибке должны
- 93. CREATE PROCEDURE insert_data @a int, @b int BEGIN TRY BEGIN TRANSACTION INSERT INTO sometable(a, b) VALUES
- 94. В теле процедуры не должны применяться локальные переменные, чьи имена совпадают с именами параметров этой процедуры.
- 95. Пример: создается хранимая процедура для вычисления суммы 2 чисел. USE GO CREATE PROCEDURE SUMMA @A smallint,
- 96. DECLARE @S INT EXEC SUMMA 2, 3, @S OUTPUT SELECT @S
- 97. Пример. Создать процедуру для начисления стипендии студентам в зависимости от полученного среднего балла. В процедуру передаётся
- 98. CREATE PROCEDURE STIP @N TINYINT --средний балл AS BEGIN DECLARE @X REAL SELECT @X= CASE @N
- 99. Вызов процедуры: EXEC STIP 10
- 100. ALTER PROCEDURE [dbo].[STIP] @N TINYINT, @X INT OUTPUT AS BEGIN SELECT @X= CASE @N WHEN 8
- 101. Запуск процедуры: DECLARE @Y INT EXEC STIP 6, @Y OUTPUT SELECT ‘Установлена стипендия: ‘ + CAST
- 102. Пример создания процедуры с входным параметром и значением по умолчанию для изменения значения цены (по умолчанию
- 103. EXEC UPDATE_Price 4 или EXEC UPDATE_Price - будет использовано значение по умолчанию.
- 104. Создать процедуру для повышения заработной платы сотрудников в зависимости от количества объетов, за которые они отвечают
- 105. CREATE PROCEDURE [dbo].[INCREASE_SALARY] (@Staff_no nchar(9), @percent decimal) AS DECLARE @S int SELECT @S = COUNT (*)
- 106. Выражение IF EXISTS() Выражение IF EXISTS() использует в качестве условия наличие какой-либо строки, возвращённой инструкцией SELECT.
- 107. В следующем примере выражение IF EXISTS используется для проверки наличия у сотрудника с кодом ‘BMO550262’ каких-либо
- 108. 3. Процедура для повышения стипендии студентам, прослушавшим спецкурс по заданному предмету. В процедуру будут передаваться следующие
- 109. CREATE PROC IND_STIP (@NOM_ZACH int, @PKOD smallint, @IND real) AS IF EXISTS (SELECT PKOD, NOM_ZACH FROM
- 110. Для запуска процедуры: EXEC IND_STIP @NOM_ZACH = 1298, @PKOD =1212, @IND=1.2
- 111. 4. Создать процедуру для повышения заработной платы сотрудника только в том случае, если за ним закреплён
- 112. CREATE PROC NEW_SALARY (@Staff_no char(9), @Procent decimal) AS IF EXISTS (SELECT property_no FROM PROPERTY WHERE Staff_No=
- 113. CREATE PROC NEW_SALARY (@Staff_no char(9)) AS IF (SELECT count(*) FROM PROPERTY WHERE Staff_No= @Staff_No ) begin
- 114. Пример использования вложенных процедур. Разработать процедуру для получения количества сотрудников, получающих заработную плату выше средней CREATE
- 115. ALTER PROC my_proc2 @count_number INT OUTPUT AS BEGIN DECLARE @AVSAL money EXEC @AVSAL = my_proc1 SELECT
- 117. Скачать презентацию