|
Программирование >> Построение запросов sql
процедуру Factorial в интерактивном режиме и передать ей в параметра значение 170, необходимо выполнить следующий запрос: EXECUTE PROCEDURE Factorial (170);. Результат вызова процедуры Factorial представлен на рис. 6.5. качестве Procedure exe<:utin9 results: N FACTORIAL = 7,257415615307ЭЭЕ306 Рис. 6.5. Результат вызова процедуры Factorial Удалить процедуру Factorial нельзя из-за того, что ее использует процедура FactorialSet. Выполняемая процедура FactorialSet предназначена для вычисления значений факториала чисел из некоторого диапазона и занесения полученных результатов в таблицу Ftable. Процедура получает в качестве параметров первое (Minf) и последнее (Maxf) значения диапазона вычисления факториала. В теле процедуры осуществляется цикл от Minf до Maxf с шагом, равным единице. Для каждого значения параметра цикла (локальная переменная i) вычисляется значение факториала путем вызова процедуры Factorial. Число, для которого вычислен факториал, и значение факториала заносятся в таблицу Ftable. Например, чтобы вычислить пять значений факториала от 1 до 5, необходимо в интерактивном режиме выполнить следующий запрос: EXECUTE PROCEDURE FactorialSet (1, 5);. Для просмотра результатов выполнения процедуры необходимо выполнить следующий запрос для таблицы Ftable: SELECT * FROM Ftable;. Результат выполнения запроса представлен на рис. 6.6.
Рис. 6.6. Таблица Ftable со значениями факториалов от 1 до 5 В хранимых процедурах можно использовать запросы модификации данных INSERT, UPDATE OR INSERT, UPDATE и DELETE, содержащие предложение RETURNING для указания, что значения определенных столбцов в изменяемых строках должны запоминаться в соответствующих переменных, перечисленных в списке после INTO. Предложение RETURNING, употребляемое в конце запросов модификации DML, имеет следующий формат: RETURNING <список столбцов> INTO <список переменных>;. Столбцы, указанные в <список столбцов>, могут быть любыми столбцами из целевой таблицы, в том числе обновляемыми. Следует учесть, что запросы модификации данных, использующие предложение RETURNING, должны оперировать не более чем с одной строкой набора данных. Например, определение выполняемой хранимой процедуры, использующей запрос на удаление данных с предложением RETURNING, может выглядеть следующим образом: CREATE PROCEDURE Save Del (Req CD INTEGER) RETURNS (RAccountCD VARCHAR(6), RDate DATE) AS BEGIN DELETE FROM Request WHERE RequestCD= :Req CD RETURNING AccountCD, IncomingDate INTO :RAccountCD, :RDate; END. Эта ХП удаляет информацию о ремонтной заявке с заданным номером (Req CD). При этом номер лицевого счета абонента, подавшего удаляемую заявку, и дата подачи этой заявки выводятся как результат выполнения процедуры. Процедура может быть выполнена, например, с помощью следующего запроса: EXECUTE PROCEDURE Save Del(1);. Результат выполнения процедуры представлен на рис. 6.7. Рис. 6.7. Результат выполнения процедуры SaveDel Процедурный язык Firebird предоставляет возможность выполнения запросов DDL и DML в теле модуля с помощью оператора EXECUTE STATEMENT. В таком случае запрос записывается как <строка>, которая может быть сконструирована как локальная переменная в теле модуля или же передана внешним приложением или хранимой процедурой в качестве входного аргумента для другой хранимой процедуры. Оператор EXECUTE STATEMENT может использоваться как в хранимых процедурах, так и в триггерах и выполняемых блоках на PSQL. Синтаксис оператора EXECUTE STATEMENT следующий: FOR] EXECUTE STATEMENT <строка> [INTO: <имя переменной1> [, : <имя переменной2> ]] DO <группа операторов>;. Можно выделить в данном синтаксисе три формы использования оператора EXECUTE STATEMENT. Первая форма (простейшая) представлена следующим синтаксисом: EXECUTE STATEMENT <строка>;. В простейшей форме оператор EXECUTE STATEMENT выполняет запрос SQL, записанный как <строка>, который производит какое-то действие, но не возвращает строк данных. Такой запрос может представлять собой следующее: - запрос DML (INSERT, DELETE, UPDATE); - EXECUTE PROCEDURRE; - любой запрос DDL за исключением CREATE DATABASE и DROP DATABASE. Например, если создать процедуру следующим образом: CREATE PROCEDURE SampleOne (Sql VARCHAR(60), Account VARCHAR(30)) BEGIN EXECUTE STATEMENT Sql :Account; END, то выполнить ее можно, например, с помощью следующего запроса: EXECUTE PROCEDURE SampleOne (DELETE FROM REQUEST WHERE AccountCD=, 005488);. Вторая форма оператора EXECUTE STATEMENT имеет следующий формат: EXECUTE STATEMENT <строка> INTO :<имя переменной1> [, :<имя переменной2> В этом случае <строка> представляет собой запрос, возвращающий одиночную строку данных. Только <скалярный поцзапрос> может быть выполнен при использовании второй формы оператора EXECUTE STATEMENT (<поцзапрос столбца> и <табличный поцзапрос> не могут использоваться). Примером создания выполняемой процедуры, использующей вторую форму синтаксиса оператора EXECUTE STATEMENT, может быть следующий: CREATE PROCEDURE SampleTwo ( ColName VARCHAR(50), TableName VARCHAR (50)) RETURNS (Maxim NUMERIC(15,2))
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |