Особенности промышленных серверов при работе с процедурами SQL
InterBase/Firebird
1) Процедуры действия
CREATE PROCEDURE <имя процедуры> [(<имя параметра><тип данных>[(<размер>)],…)] [RETURNS (<имя параметра><тип данных>[(<размер>)],…)] AS [DECLARE VARIABLE <имя переменной><тип данных>[(<размер>)];]
BEGIN
<SQL-операторы>
END
Пример:
CREATE PROCEDURE CustAmt (CNum Smallint) RETURNS (SumAmt Float) AS
BEGIN
SELECT SUM(Orders.Amt) FROM Customer INNER JOIN Orders ON Orders.CNum=Customer.CNum
AND (Customer.CNum:=CNum) INTO :SumAmt;
ENDEXECUTE PROCEDURE CustAmt(2008)
Результат: ничего
SELECT SUM(Orders.Amt) FROM Customer INNER JOIN Orders ON Orders.CNum=Customer.CNum AND (Customer.CNum=2008)
Результат: 1116,85
2) Процедуры выбора данных
CREATE PROCEDURE <имя процедуры> [(<имя параметра><тип данных>[(<размер>)],…)] [RETURNS <имя параметра><тип данных>[(<размер>)],…) AS [DECLARE VARIABLE <имя переменной><тип данных> [(<размер>)];]
BEGIN
<SQL-операторы>
SUSPEND;
END
Пример:
CREATE PROCEDURE AllCustAmt RETURNS (CNum Smallint, SumAmt Float) AS
BEGIN
FOR SELECT Customer.CNum, SUM(Orders.Amt) FROM Customer INNER JOIN Orders ON Orders.CNum=Customer.CNum GROUP BY Customer.CNum INTO :CNum, :SumAmt
DO SUSPEND;
ENDEXECUTE PROCEDURE AllCustAmt(2008)
SELECT * FROM AllCustAmt
Результат:
2001 767,1900024441406
2002 1713,22998046875
2003 5160,4501953125
2004 1385,69995117188
2006 14614,8798828125
2007 1900,099975558594
2008 1116,84997558594
SQL Server
1) Создание процедуры в SQL Server
CREATE PROCEDURE <имя процедуры> [@<имя параметра><тип данных>[(<размер>)][=<значение по умолчанию>] [OUT|OUTPUT][READONLY],…] [WITH{ENCRYPTION|RECOMPILE},…]
AS [BEGIN]
<SQL-операторы>
[END]
2) Ключевые слова
• =<значение по умолчанию> — параметру может быть присвоено начальное значение и процедура может вызываться без присвоения ему значения.
• READONLY – в теле процедуры такому параметру нельзя присваивать значение.
• ENCRYPTION – процедура будет доступна только привилегированным пользователям.
• RECOMPILE – план выполнения не кэшируется и процедура компилируется во время выполнения.
3) Выполнение процедуры SQL Server
[EXEC[UTE]]<имя процедуры>[{[@<имя параметра>=]<значение параметра>|@<имя переменной> [OUTPUT]|[DEFAULT]},…][WITH RECOMPILE]
Пример:
USE B1
GO
CREATE PROCEDURE CustAmt @CNum Int=2008, @Sum.Amt Float OUTPUT AS
BEGIN
SELECT Sum(Orders.Amt) FROM Customer INNER JOIN Orders ON Customer.CNum=Orders.CNum AND Customer.CNum=@CNum
ENDExec CustAmt DEFAULT, @SumAmt=0
Результат: 1116,85
Exec CustAmt DEFAULT 2004, @SumAmt=0
Результат: 1385,7
Пример:
USE B1;
GO
CREATE PROCEDURE AllCustAmt @CNum Int OTUPUT, @Sum.Amt Float OUTPUT AS
BEGIN
SELECT Customer.CNum, Sum(Orders.Amt) FROM Customer INNER JOIN Orders ON Customer.CNum=Orders.CNum AND Customer.CNum=@CNum GROUP BY Customer.CNum
END
Exec AllCustAmt @CNum=0, @SumAmt=0
2001 767,19
2002 1713,23
2003 5160,45
2004 1385,7
2006 14614,88
2007 1900,1
2008 1116,85
AllCustAmt @CNum=0, @SumAmt=0
2001 767,19
2002 1713,23
2003 5160,45
2004 1385,7
2006 14614,88
2007 1900,1
2008 1116,85
Declare @SM Float; Exec AllCustAmt 0, @SM
2001 767,19
2002 1713,23
2003 5160,45
2004 1385,7
2006 14614,88
2007 1900,1
2008 1116,85
4) System Stored Procedure
В SQL Server многие задачи администрирования и сбора информации можно выполнять с помощью системных хранимых процедур. Системные хранимые процедуры объединяются в категории, перечисленные в следующей таблице.
Категория | Описание |
Хранимые процедуры для работы с Active Directory | Используются для регистрации экземпляров SQL Server и бах данных SQL Server в службе Microsoft 2000 Active Directory. |
Хранимые процедуры для работы с каталогом | Используются для реализации функций словаря данных ODBC и изоляции ODBC-приложений от изменений во внутренних системных таблицах. |
Хранимые процедуры системы отслеживания измененных данных | Используются для включения, отключения или подготовки отчетов об объектах системы отслеживания измененных данных. |
Хранимые процедуры для работы с курсорами | Используются для реализации различной функциональности курсоров. |
Хранимые процедуры для работы с ядром СУБД | Используются для выполнения общих задач по обслуживанию компонента SQL Server Database Engine. |
Use b1;
Exec sp_tables @table_name=’%’, @table_owner=’dbo’
TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS |
B1 | dbo | Customer | TABLE | NULL |
B1 | dbo | Department | TABLE | NULL |
B1 | dbo | Orders | TABLE | NULL |
B1 | dbo | SalesPeople | TABLE | NULL |
B1 | dbo | Worker | TABLE | NULL |