Особенности промышленных серверов при работе с процедурами 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;
END

EXECUTE 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;
END

EXECUTE 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
END

Exec 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_QUALIFIERTABLE_OWNERTABLE_NAMETABLE_TYPEREMARKS
B1dboCustomerTABLENULL
B1dboDepartmentTABLENULL
B1dboOrdersTABLENULL
B1dboSalesPeopleTABLENULL
B1dboWorkerTABLENULL


Комментарии запрещены.




Статистика