|
Программирование >> Sql: полное руководство
На рис 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 на диалект ЫогпЫ
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |