15 ответов:
хранимые процедуры пакета инструкций SQL, которые могут быть выполнены несколькими способами. Большинство основных СУБД поддерживают хранимые процедуры; однако не все это делают. Вам нужно будет проверить с вашей конкретной справочной документацией СУБД для специфики. Поскольку я больше всего знаком с SQL Server, я буду использовать его в качестве своих образцов.
для создания хранимой процедуры синтаксис довольно прост:
CREATE PROCEDURE <owner>.<procedure name> <Param> <datatype> AS <Body>например:
CREATE PROCEDURE Users_GetUserInfo @login nvarchar(30)=null AS SELECT * from [Users] WHERE ISNULL(@login,login)=loginв пользу хранимых процедур что вы можете централизовать логику доступа к данным в одном месте, которое затем легко оптимизировать для DBA. Хранимые процедуры также имеют преимущество в плане безопасности, поскольку вы можете предоставить права на выполнение хранимой процедуре, но пользователю не нужно будет иметь разрешения на чтение/запись в базовых таблицах. Это хороший первый шаг против SQL-инъекций.
хранимые процедуры имеют недостатки, в основном обслуживание, связанное с вашим базовым CRUD операции. Скажем так для каждой таблицы у вас есть вставка, обновление, удаление и по крайней мере один выбор на основе первичного ключа, что означает, что каждая таблица будет иметь 4 процедуры. Теперь возьмите приличный размер базы данных из 400 таблиц, и у вас есть 1600 процедур! И это при условии, что у вас нет дубликатов, которые вы, вероятно, будете.
Это где с помощью ОРМ или какой-то другой метод для автоматического создания ваших основных операций CRUD имеет массу достоинств.
хранимая процедура-это скомпилированный набор SQL-операторов, которые используются для выполнения специальных задач.
пример: если у меня есть
EmployeeтаблицаEmployee ID Name Age Mobile --------------------------------------- 001 Sidheswar 25 9938885469 002 Pritish 32 9178542436сначала я получаю
Employeeстол:Create Procedure Employee details As Begin Select * from Employee Endчтобы запустить процедуру на SQL Server:
Execute Employee details --- (Employee details is a user defined name, give a name as you want)затем во-вторых, я вставляю значение в таблицу Employee
Create Procedure employee_insert (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int) As Begin Insert Into Employee Values (@EmployeeID, @Name, @Age, @Mobile) Endдля запуска параметризованной процедуры на SQL Сервер:
Execute employee_insert 003,’xyz’,27,1234567890 --(Parameter size must be same as declared column size)пример:
@Name Varchar(30)на
EmployeeтаблицыNameразмер столбца должен бытьvarchar(30).
хранимая процедура-это группа инструкций SQL, которая была создана и сохранена в базе данных. Хранимая процедура принимает входные параметры, так что одна процедура может использоваться по сети несколькими клиентами, использующими разные входные данные. А хранимые процедуры уменьшат сетевой трафик и повысят производительность. Если мы изменим хранимую процедуру, все клиенты получат обновленную хранимую процедуру.
пример создания хранимой процедура
CREATE PROCEDURE test_display AS SELECT FirstName, LastName FROM tb_test; EXEC test_display;преимущества использования хранимых процедур
хранимая процедура позволяет модульное Программирование.
вы можете создать процедуру один раз, сохранить ее в базе данных и вызвать ее любое количество раз в своей программе.
хранимая процедура позволяет ускорить выполнение.
если операция требует большого количества кода SQL, который выполняется повторно, хранимые процедуры могут быть быстрее. Они анализируются и оптимизируются при первом выполнении, а скомпилированная версия хранимой процедуры остается в кэше памяти для последующего использования. Это означает, что хранимая процедура не нуждается в повторной обработке и повторной оптимизации с каждым использованием, что приводит к гораздо более быстрому времени выполнения.
хранимая процедура может уменьшить сетевой трафик.
операция, требующая сотни строк кода Transact-SQL, может быть выполнена с помощью одной инструкции это выполняет код в процедуре, а не путем отправки сотен строк кода по сети.
хранимые процедуры обеспечивают лучшую безопасность ваших данных
пользователям может быть предоставлено разрешение на выполнение хранимой процедуры, даже если у них нет разрешения на выполнение инструкций процедуры напрямую.
в SQL Server мы имеем различные типы хранимых процедур:
как правило, хранимая процедура является " функцией SQL."У них есть:
-- a name CREATE PROCEDURE spGetPerson -- parameters CREATE PROCEDURE spGetPerson(@PersonID int) -- a body CREATE PROCEDURE spGetPerson(@PersonID int) AS SELECT FirstName, LastName .... FROM People WHERE PersonID = @PersonIDЭто пример, ориентированный на T-SQL. Хранимые процедуры могут выполнять большинство инструкций SQL, возвращать скалярные и табличные значения и считаются более безопасными, поскольку они предотвращают атаки SQL-инъекций.
подумай о такой ситуации,
- у вас есть база данных с данными.
- существует ряд различных приложений, необходимых для доступа к этой центральной базе данных, и в будущем некоторые новые приложения тоже.
- Если вы собираетесь вставлять встроенные запросы к базе данных для доступа к центральной базе данных, внутри кода каждого приложения по отдельности, то, вероятно, вам придется дублировать один и тот же запрос снова и снова внутри разных приложений' код.
- В такой ситуации, вы можете использовать хранимые процедуры (СПС). С помощью хранимых процедур вы записываете количество общих запросов (процедур) и сохраняете их в центральной базе данных.
- Теперь дублирование работы никогда не будет происходить, как раньше, и доступ к данным и обслуживание будет осуществляться централизованно.
Примечание:
- В описанной выше ситуации, вы можете задаться вопросом "почему мы не можем ввести централизованный сервер доступа к данным взаимодействовать со всеми приложениями? Да. Это будет возможной альтернативой. Но,
- основное преимущество SPs перед этим подходом заключается в том, что в отличие от вашего кода доступа к данным со встроенными запросами SPs являются предварительно скомпилированными инструкциями, поэтому они будут выполняться быстрее. А затраты на связь (по сетям) будут минимальными.
- напротив этого, SPs добавит дополнительную нагрузку на сервер базы данных. Если это будет проблемой, в зависимости от ситуации, централизованный сервер доступа к данным с помощью встроенных запросов будет лучшим выбором.
хранимая процедура используется для выполнения определенных задач на базе. Например
- получить результирующие наборы базы данных из некоторых бизнес-логики на данных.
- выполнить несколько операций с базой данных в одном вызове.
- используется для переноса данных из одной таблицы в другую таблицу.
- может быть вызван для других языков программирования, таких как Java.
хранимая процедура-это не что иное, как группа инструкций SQL, скомпилированных в единый план выполнения.
- создайте один раз и назовите его n раз
- это уменьшает сетевой трафик
пример: создание хранимой процедуры
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE GetEmployee @EmployeeID int = 0 AS BEGIN SET NOCOUNT ON; SELECT FirstName, LastName, BirthDate, City, Country FROM Employees WHERE EmployeeID = @EmployeeID END GOизменить или изменить хранимую процедуру:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE GetEmployee @EmployeeID int = 0 AS BEGIN SET NOCOUNT ON; SELECT FirstName, LastName, BirthDate, City, Country FROM Employees WHERE EmployeeID = @EmployeeID END GOудаление или удаление хранимой процедуры:
DROP PROCEDURE GetEmployee
хранимая процедура используется для извлечения данных, изменения данных и удаления данных в таблице базы данных. Вам не нужно писать целую команду SQL каждый раз, когда вы хотите вставить, обновить или удалить данные в базе данных SQL.
хранимая процедура представляет собой предварительно скомпилированный набор одной или нескольких инструкций SQL, которые выполняют определенную задачу.
хранимая процедура должна выполняться отдельно с помощью
EXECхранимая процедура может возвращать несколько параметров
хранимая процедура может использоваться для реализации transact
"что такое хранимая процедура" уже ответили в других сообщениях здесь. Что я буду публиковать один, менее известный способ использования хранимой процедуры. Это
grouping stored proceduresилиnumbering stored procedures.Ссылка На Синтаксис
; numberпо состоянию на этойнеобязательное целое число, которое используется для группировки процедур с одинаковым именем. Эти сгруппированные процедуры могут быть удалены вместе с помощью одной капли Заявление о процедуре
пример
CREATE Procedure FirstTest ( @InputA INT ) AS BEGIN SELECT 'A' + CONVERT(VARCHAR(10),@InputA) END GO CREATE Procedure FirstTest;2 ( @InputA INT, @InputB INT ) AS BEGIN SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB) END GOиспользовать
exec FirstTest 10 exec FirstTest;2 20,30результат
Еще Одна Попытка
CREATE Procedure SecondTest;2 ( @InputA INT, @InputB INT ) AS BEGIN SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB) END GOрезультат
Msg 2730, Уровень 11, Состояние 1, Процедура SecondTest, Строка 1 [Строка Запуска Пакета 3] Не удается создать процедуру "SecondTest" с номером группы 2, потому что процедура с таким же именем и номером группы 1 в настоящее время не существует в базе данных. Необходимо выполнить процедуру CREATE 'SecondTest'; 1 first.
ссылки:
- создать процедуру с синтаксисом для number
- нумерованные хранимые процедуры в SQL Server - techie-friendly.blogspot.com
- Группировка Хранимых Процедур - sqlmag
осторожностью
- после того, как вы сгруппируете процедуры, вы не можете отбросить их по отдельности.
- эта функция может быть удалена в будущей версии Microsoft SQL Server.
хранимая процедура-это именованная коллекция инструкций SQL и процедурной логики, т. е. скомпилированная, проверенная и сохраненная в базе данных сервера. Хранимая процедура обычно обрабатывается как другие объекты базы данных и управляется с помощью механизма безопасности сервера.
в СУБД хранимая процедура представляет собой набор инструкций SQL с присвоенным именем, который хранится в базе данных в скомпилированном виде, чтобы он мог совместно использоваться несколькими программами.
использование хранимой процедуры может быть полезным в
обеспечение контролируемого доступа к данным (конечные пользователи могут только вводить или изменять данные, но не могу писать процедуры)
обеспечение целостности данных (данные будут вводиться последовательно) и
повышает производительность (операторы хранимой процедуры должны быть записаны только один раз)
для простой,
Хранимая Процедура are Сохраненные Программы программы/функции хранится в базе данных.
каждая сохраненная программа содержит тело, которое состоит из инструкции SQL. Этот оператор может быть составным оператором, состоящим из нескольких операторов, разделенных точками с запятой (;).
CREATE PROCEDURE dorepeat(p1 INT) BEGIN SET @x = 0; REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT; END;
хранимые процедуры в SQL Server могут принимать входные параметры и возвращать несколько значений выходных параметров; в SQL Server операторы программы хранимых процедур выполняют операции в базе данных и возвращают значение состояния вызывающей процедуре или пакету.
преимущества использования хранимых процедур в SQL Server
они позволяют модульное Программирование. Они позволяют ускорить выполнение. Они могут уменьшить сетевой трафик. Они могут быть использованы в качестве обеспечения механизм.
вот пример хранимой процедуры, которая принимает параметр, выполняет запрос и возвращает результат. В частности хранимая процедура принимает BusinessEntityID в качестве параметра и использует его для сопоставления первичного ключа HumanResources.Таблица сотрудник для возврата запрошенного сотрудника.
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`* @businessEntityID `<<<----parameter` as begin SET NOCOUNT ON; Select businessEntityId, <<<----select statement to return one employee row NationalIdNumber, LoginID, JobTitle, HireData, From HumanResources.Employee where businessEntityId =@businessEntityId <<<---parameter used as criteria endя узнал это от essential.com...it это очень полезно.
хранимая процедура поможет вам сделать код на сервере.Вы можете передать параметры и найти выход.
create procedure_name (para1 int,para2 decimal) as select * from TableName


Comments