Что такое хранимая процедура
Хранимая процедура представляет собой SQL-инструкцию, которая позволяет последовательно выполнять набор различных запросов. Её удобно использовать при разработке отчетов и дашбордов, когда один и тот же SQL-запрос постоянно дублируется в различных источниках данных. Поэтому, например, при необходимости редактирования запросов, их придется изменять во всех отчетах. В данном случае, логично будет создать хранимую процедуру в хранилище данных, а при создании источника данных в отчетах просто вызывать лишь эту процедуру. Гибкое применение и есть первое преимущество хранимых процедур.Другие преимущества использования хранимых процедур
Использование хранимой процедуры повышает производительность в сравнении с обычной последовательностью SQL-инструкции. Это обуславливается тем, что код процедуры компилируется один раз на сервере хранилища данных при первом ее запуске, а затем сохраняется в скомпилированной форме. Также, использование хранимых процедур значительно повышает безопасность, так как при вызове процедуры через сеть виден только вызов на выполнение процедуры. Наименования объектов таблиц и баз данных недоступны, а, соответственно, произвести SQL-инъекции значительно сложнее.Использование хранимой процедуры в отчетах
Теперь расскажем о том, как можно использовать хранимую процедуру в отчетах. При разработке отчетов и дашбордов, указать текст вызова хранимой процедуры можно в редакторе источника данных при его редактировании или создании. В этом случае, ядро генератора отчетов при построении отчета выполнит запрос с хранимой процедурой, которая будет обработана на сервере с хранилищем данных. В результате будет сформирован ответ с данными, который будет возвращен генератору отчетов. Далее эти данные будут обработаны генератором отчетов и отображены во вьювере в виде отчета или дашборда.Инициализация хранимой процедуры
При указании текста вызова хранимой процедуры в источнике данных, текст вызова можно инициализировать как Запрос (Query) или Хранимая процедура (Stored Procedure). Установить инициализацию текста вызова можно при помощи параметра Тип (Type), выбрав соответствующее значение как Запрос или Хранимая процедура.Например, если текст вызова представляет собой запрос с командой выполнения хранимой процедуры, то весь текст вызова следует инициализировать как Запрос. И, соответственно, перед именем хранимой процедуры необходимо указать специальную команду выполнения хранимой процедуры. Более подробно ознакомиться с командами выполнения хранимой процедуры вы можете в спецификации вашего хранилища данных. Мы лишь отметим, что распространенными командами выполнения хранимой процедуры, в зависимости от типа хранилища данных, являются
exec
, execute
and call
.В случаях, когда при создании источника данных осуществляется выполнение только хранимой процедуры, текст вызова можно инициализировать как Хранимая процедура. Для этого в тексте вызова достаточно указать только наименование хранимой процедуры, которую необходимо выполнить.
Параметры хранимой процедуры
При вызове хранимой процедуры можно передавать параметры. Использование параметров для хранимых процедур зависит от инициализации текста вызова как Запрос или Хранимая процедура. В случаях инициализации текста вызова как Запрос, параметры указываются через запятую, с префиксом в виде специального знака@
перед наименованием параметра. Например exec StoredProcedureName @param1, @param2, @param3
.В случаях инициализации текста вызова как Хранимая процедура, достаточно создать параметры в источнике данных без их указания в тексте. Главное здесь – учитывать последовательность расположения параметров в списке. Они будут применяться последовательно, соблюдая порядок в направлении «сверху-вниз» из перечня параметров.
Также можно получить список необходимых параметров процедуры автоматически. Для этого в тексте вызова следует указать наименование процедуры, параметр Тип установить в значение Хранимая процедура и выбрать команду Получить колонки и параметры (Retrieve Columns and Parameters) из меню Получить колонки (Retrieve Columns).Примечание
В частных случаях источник данных может поддерживать только неименованные параметры (например, OleDB). В случае инициализации текста вызова как Запрос, также важно будет учитывать последовательность параметров в списке. Поскольку неименованные параметры в запросе обозначаются специальным символом
?
без указания их наименования.Кстати, недавно мы опубликовали подробную статью о параметрах в запросе. Все описанное в ней также применимо и к хранимым процедурам. В том числе и то, что в качестве параметров хранимых процедур можно использовать переменные с запросом значения от пользователя или со значением по умолчанию.
Мы рассмотрели ситуацию использования хранимых процедур при разработке отчетов и дашбордов. Использовать запросы и хранимые процедуры – решать только вам, поскольку каждая ситуация требует дополнительного рассмотрения для принятия решения. Stimulsoft лишь предоставляет различные возможности и инструменты, делая процесс разработки отчетов и дашбордов более гибким.
Также мы подготовили подробную видеоинструкцию об использовании хранимой процедуры при построении отчетов.
Если у вас остались вопросы, свяжитесь с нами.