Программирование >>  Sql: полное руководство 

1 ... 184 185 186 [ 187 ] 188 189 190 ... 264


На рис 20 2 приведен еще один вариант процедуры add cust, написанн диалекте Transact-SQL СУБД Sybase (Диалект Transact-SQL используется и crosoft SQL Server, он мало отличается от исходной версии этого диалекта из S к SQL Server, которая послужила основой для обеих линий продуктов - Mic Sybase ) Обратите внимания на отличия Transact-SQL от диалекта Oracle

ключевое слово procedure может быть сокращено до proc,

список параметров процедуры не заключен в скобки, а просто следует за и процедуры, менем

все имена параметров начинаются с символа @ как в объявлении процедупы

и в ее теле,

отсутствует формальный маркер окончания инструкции - тело процед ры по ставляет собой единую инструкцию Transact-SQL

/* Процедура для добавления данных о новом клиенте */ create proc add cust

@c name varchar (20), /* куя клиента */

I3c num integer, / идентификатор клиента */

@cred lim money, /* лимит кредита */

(?tgt sls money, /* объем продаж */

(?c rep integer, /* идентификатор служащего */

Sc offc varchar(15) /* город, в котором расположен офис */

begin

/* Добавляем новую строку в таблицу CUSTOMERS */

insert into customers (cust num, company, cust rep, credit limit) values ((?c num, @c name, (?c rep, (?cred lim)

/* Обновляем запись в таблице SALESREPS */ update salesreps

set quota = quota + @tgt sls where empl num = (?c rep

/* Обновляем запись в таблице OFFICES */ update offices

set target - target + I3tgt sls where city = @c offc

/* Заверлаем транзакцию */ commit trans

Риё20,2 Процедура*АОО Сизтна дитвщ-в Transact-SQL

На рис 20 3 приведен третий вариант процедуры add cust, написанный н диалекте Informix Объявление процедуры и ее параметров здесь ближе к диале Oracle В отличие от Transact-SQL, идентификаторы локальных переменных и пар метров не содержат никаких специальных символов Определение процедуры щается декларацией end procedure - такой более четкий синтаксис способств уменьшению количества ошибок

/* Процедура для добавления данных о новом клиенте */ create procedure add cust(

с name varchar{20), /* имя клиента */

Риа 203 Процедура ADD CUST надиаткт Informix




integer, /* идентификатор клиента */

jjed liro money(16, 2), /* лимит кредита */

tgt sis money(16, 2), /* объем продаж */

с rep integer, /* идентификатор служащего */

Qffc varchar{15}} /* город, в котором расположен офис */

/* Добавляем новую строку в таблицу CUSTOMERS */

insert into customers (cust num, company, cust rep, credit limit) values (c num, c name, c rep, cred lim)

/* Обновляем запись в таблице SALESREPS */ update salesreps

set quota = quota + tgt sls where empl num = c rep,

/* обновляем запись в таблице OFFICES */ update offices

set target = target + tgt sls where city = c offc,

/* Завершаем транзакцию */ co iit transaction, end procedure

Рис203 npateaypaAiaotSfngmarieKfe Шгтщ

Bo всех диалектах, в которых используется инструкция create procedure, хранимая процедура может быть удалена соответствующей инструкцией drop Рко-

cedure

DROP PROCEDURE ADD CUST

Вызов хранимой процедуры

Хранимую процедуру можно вызывать по-разному из приложения с помощью соответствующей инструкции SQL, из другой хранимой процедуры, а также в интерактивном режиме Синтаксис вызова хранимых процедур зависит от используемого диалекта Вот пример вызова процедуры add cust на диалекте PL/SQL

EXECUTE ADD CUST(XYZ Corporation, 2317, 30000 00, 50000 00, 103, Chicago)

Передаваемые процедуре параметры задаются в том порядке, в каком они объявле-НЬ1, в виде списка, заключенного в скобки При вызове из другой хранимой процедуры или триггера ключевое слово execute может быть опущено, тогда вся инструк-ия чуть упрощается

DD CUST(XYZ Corporation, 2317, 30000 00, 50000 00, 103, Chicago)

На диалекте Transact-SQL вызов этой же процедуры выглядит так

ЕСигЕ ADD CUST XYZ Corporation, 2317, 30000 00, 50000 00, 103, Chicago

Скобки здесь не нужны - просто перечислите значения параметров через запя-Кро имени процедуры Ключевое слово execute можно сократить до exec S того, задавая параметры, можно явно указать их имена, что позволяет



На рис. 20.2 приведен еще один вариант процедуры add cust, написанный ца диалекте Transact-SQL СУБД Sybase. (Диалект Transact-SQL используется и в Mj crosoft SQL Server; он мало отличается от исходной версии этого диалекта из Sybase SQL Server, которая послужила основой для обеих линий продуктов - Microsoft ц Sybase.) Обратите внимания на отличия Transact-SQL от диалекта Oracle:

ключевое слово procedure может быть сокращено до proc;

список параметров процедуры не заключен в скобки, а просто следует за именем процедуры;

все имена параметров начинаются с символа @ как в объявлении процедуры, так и в ее теле;

отсутствует формальный маркер окончания инструкции - тело процедуры представляет собой единую инструкцию Transact-SQL.

/* Процедура для добавления данных о новом клиенте */ create proc add cust

@c name varchar(20), /* имя клиента */

@c num integer, /* идентификатор клиента */

@cred lim money, /* лимит кредита */

@tgt sls money, /* объем продаж */

@c rep integer, /* идентификатор служащего */

@c offc varchar{15} /* город, в котором расположен офис */

begin

/* Добавляем новую строку в таблицу CUSTOMERS */

insert into customers (cust num, company, cust rep, credit limit) values {@c num, @c name, @c rep, @cred lim}

/* Обновляем запись в таблице SALESREPS */ update salesreps

set quota = quota + @tgt sls where empl num = @c rep

/* Обновляем запись в таблице OFFICES */ update offices

set target target + @tgt sls where city = @c offc

/* Завершаем транзакцию */ commit trans

Рис. 20.2. Г\{юи,ецура А13Р С03Тща /щлекгв Transad-SQL

На рис. 20.3 приведен третий вариант процедуры add cust, написанный на диалекте Informix Объявление процедуры и ее параметров здесь ближе к диалекту Oracle. В отличие от Transact-SQL, идентификаторы локальных переменных и параметров не содержат никаких специальных символов. Определение процедуры завер-щается декларацией end procedure - такой более четкий синтаксис способствует уменьшению количества ошибок.

/* Процедура для добавления данных о новом клиенте */ create procedure add cust(

с name varchar(20), /* имя клиента */

Рис. 20.3. Процедура ADD cnST на диалект ЫогпЫ



1 ... 184 185 186 [ 187 ] 188 189 190 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика