Хранимые процедуры и функции, определенные пользователем

В этом разделе вводятся описания пакетов и подпрограмм. Пакеты являются последовательностью операторов Transact-SQL и процедурных расширений. Подпрограммы могут быть либо хранимыми процедурами, либо функциями, определенными пользователем (User Defined Function, UDF). В начале главы вводятся все процедурные расширения, поддерживаемые Database Engine. После этого процедурные расширения используются вместе с операторами Transact-SQL, чтобы продемонстрировать, как могут быть реализованы пакеты. Пакет может быть сохранен как объект базы данных в виде хранимой процедуры или UDF. Одни процедуры написаны пользователями, другие предоставляются корпорацией Microsoft, они называются системными хранимыми процедурами. В отличие от пользовательских хранимых процедур функции, написанные пользователем, возвращают вызвавшей программе некоторое значение. Все подпрограммы могут быть написаны либо на Transact-SQL, либо на любом языке программирования, таком как С# или Visual Basic.

Оценить
(2 голоса)
В предыдущих главах описывались операторы Transact-SQL, которые принадлежат языку определения данных DDL или языку манипулирования данными DML. Большинство из этих операторов может быть сгруппировано вместе для создания пакета. Как было сказано, пакет является последовательностью операторов Transact-SQL и процедурных расширений, которые отправляются в систему баз данных для совместного выполнения. Количество операторов в пакете ограничивается размером скомпилированного пакетного объекта. Основным преимуществом пакета перед группой одиночных операторов является то, что выполнение за один раз всех операторов дает значительный выигрыш в производительности. Существует много ограничений, связанных с использованием различных операторов Transact-SQL внутри пакета. Наиболее важное заключается в том, что операторы определения данных create view,…
Оценить
(1 голос)
Блок позволяет создавать программную единицу из одного или более операторов Transact-SQL. Каждый блок начинается с оператора begin и заканчивается оператором end, как показано в следующем примере: begin оператор 1 оператор 2 END Блок может быть использован внутри оператора if, чтобы предоставить возможность выполнения более одного оператора в зависимости от некоторого условия (см. пример 8.1).
Оценить
(1 голос)
Оператор if в языке Transact-SQL соответствует оператору с тем же названием, который поддерживается почти всеми языками программирования. Оператор if выполняет один оператор Transact-SQL (или несколько операторов, составляющих блок), если логическое выражение, которое следует за ключевым словом if, возвращает значение «истина». Если оператор if содержит оператор else, то вторая группа операторов будет выполняться, если логическое выражение возвращает ложь, возвращает истину для базы данных sample.   Поэтому выполняется одиночный оператор print в части if. Обратите внимание, что этот пример использует подзапрос для определения количества строк (с помощью агрегатной функции count), которые соответствуют условию в предложении where (projectno = 'pi')- Результатом выполнения примера…
Оценить
(1 голос)
Оператор while многократно выполняет один оператор Transact-SQL (или более операторов, заключенных в блок), пока логическое выражение возвращает значение «истина». Другими словами, если выражение истинно, то выполняется оператор (или блок операторов), после чего опять вычисляется логическое выражение, чтобы определить, должен ли снова выполняться оператор (или блок операторов). Этот процесс повторяется, пока выражение не станет ложным. Блок в операторе while может содержать один из двух операторов, используемых для управления выполнением операторов в блоке: break или continue. Оператор break останавливает выполнение операторов внутри блока и начинает выполнять оператор, следующий сразу за этим блоком. Оператор continue останавливает выполнение только текущего оператора и начинает выполнение…
Оценить
(0 голоса)
Локальные переменные являются важным процедурным расширением языка Transact-SQL. Они используются для хранения значений (любых типов) в пакетах или подпрограммах. Они являются «локальными» потому, что на них можно сослаться только в том же пакете, в котором они определены. Database Engine также поддерживает глобальные переменные, которые описываются. Каждая локальная переменная должна быть определена с использованием оператора declare. Синтаксис оператора declare см. в примере 8.3. Определение каждой переменной содержит ее имя и соответствующий тип данных. К переменным всегда выполняется обращение с использованием префикса @. Присваивание значений локальным переменным выполняется с помощью следующих конструкций: ♦ специальной формы оператора select; ♦ оператором set. Использование обоих…
Оценить
(1 голос)
Процедурное расширение языка Transact-SQL также содержит следующие операторы: ♦ return; ♦ goto; ♦ raiseerror; ♦ waitfor. Оператор return имеет ту же функциональность внутри пакета, что и оператор break внутри while. Это означает, что оператор return приводит к завершению выполнения пакета, после чего будет выполняться первый оператор, следующий сразу после пакета. Оператор goto передает управление на метку, которая стоит перед оператором Transact-SQL в этом же пакете. Оператор raiseerror генерирует сообщение об ошибке, созданное пользователем, и устанавливает флаг системной ошибки. Номер ошибки, определенной пользователем, должен быть больше чем 50 000. (Все номера ошибок, меньше или равные 50 000, определены в системе и…
Оценить
(0 голоса)
Версии SQL Server, предшествующие SQL Server 2005, требовали написание кода обработки ошибок после каждого оператора Transact-SQL, который может вызывать ошибки. (Вы можете обрабатывать ошибки, используя глобальную переменную @@error. В примере 13.1 показано использование этой переменной.) Начиная с SQL Server 2005, вы можете перехватить и обработать исключения, используя два оператора- try и catch. В этом разделе вначале объясняется, что означает «исключение», затем обсуждается работа этих двух операторов. Исключение- это проблема (обычно ошибка), которая препятствует продолжению выполнения программы. При наличии такой проблемы вы не можете продолжать обработку, потому что у вас нет достаточной информации, необходимой для решения проблемы. По этой причине существующая…
Оценить
(2 голоса)
Хранимая процедура является специальным видом пакета, написанного на Transact-SQL с использованием языка SQL и его процедурных расширений. Основным отличием между пакетом и хранимой процедурой является то, что процедура сохраняется как объект базы данных. Другими словами, хранимая процедура сохраняется на серверной стороне для улучшения производительности и согласованности повторяющихся задач. Database Engine поддерживает хранимые процедуры и системные процедуры. Хранимые процедуры создаются тем же самым способом, что и все другие объекты базы данных, т. е. при помощи языка DDL. Системные процедуры предоставляются через Database Engine и могут быть использованы для доступа и изменения информации в системных каталогах. Этот раздел описывает хранимые процедуры (определяемые…
Оценить
(0 голоса)
Хранимые процедуры создаются при помощи оператора create procedure, который имеет следующий синтаксис: create proc[edure]   [schema_name.]proc_name [{{Qparaml} typel [ varying]   [= default!]   [output])]  (,   ...} [with { recompile | encryption | execute as   'user_name' }} [for replication] as batch i external name method_name; Здесь schema_name- имя схемы, которой назначается создаваемая хранимая процедура; ргос_  - имя новой хранимой процедуры; Qparami - это имя параметра, a typel задает его тип данных. Параметр в хранимой процедуре имеет тот же самый логический смысл, что и локальная переменная в пакете. Параметры являются значениями, передаваемыми от вызвавшего объекта хранимой процедуре и используемыми в хранимой процедуре. Параметр defauiti…
Оценить
(1 голос)
Database Engine также поддерживает и оператор alter procedure, который изменяет структуру хранимой процедуры. Оператор alter procedure обычно используется для изменения операторов Transact-SQL внутри процедуры. Все опции оператора alter procedure соответствуют опциям с теми же названиями в операторе create procedure. Основным назначением этого оператора является исключение переназначения существующих привилегий для хранимой процедуры. Хранимая процедура (или группа хранимых процедур с тем же именем) удаляется при использовании оператора drop procedure. Только владелец хранимой процедуры или участники фиксированных ролей dbowner и sysadmin могут удалять процедуру. Database Engine содержит несколько представлений каталогов, относящихся к хранимым процедурам. Наиболее важными представлениями являются sys.objects и sys.procedures. Все строки…
«ПерваяПредыдущая12СледующаяПоследняя»
Навигация
© 2018 www.serversql.ru. Все права защищены.