Шрифт:
. ! .
В приложениях со встроенным SQL (ESQL) можно конструировать предварительно скомпилированные операторы SQL, чтобы передать фрагменты массивов для изменения (замены) соответствующих фрагментов в хранимых массивах.
Не существует возможности изменять столбцы массивов в DSQL. Для изменения массивов необходимо в коде приложения или компонента реализовать пользовательские методы, которые вызывают функцию API isc_array_put_slice.
Ограничения DEFAULT никогда не учитываются при выполнении операторов UPDATE.
Оператор DELETE
Запрос DELETE используется для удаления целых строк таблицы. SQL не дает возможности одному оператору DELETE удалять строки более чем из одной таблицы. Запрос DELETE, который изменяет только одну текущую строку курсора, называется позиционированным удалением. Оператор DELETE имеет следующую общую форму:
DELETE FROM имя-таблицы
[WHERE <предикаты-поиска>
| WHERE CURRENT OF имя-курсора]
Если не указано предложение WHERE, то будут удалены все строки таблицы.
Оператор EXECUTE
Оператор EXECUTE доступен только в ESQL. Он используется в приложениях со встроенным SQL для выполнения подготовленного динамического оператора SQL. В этом его отличие от обычных операторов DML в ESQL, которые являются предварительно скомпилированными и поэтому не подготавливаются во время выполнения.
! ! !
ПРИМЕЧАНИЕ. Не путайте оператор EXECUTE с синтаксисом оператора EXECUTE STATEMENT, который поставляется в расширениях PSQL в Firebird 1.5 и выше и с оператором EXECUTE PROCEDURE В DSQL (описывается далее в разд. "Выполняемые процедуры").
. ! .
Запросы, которые вызывают хранимые процедуры
Firebird поддерживает два стиля хранимых процедур: выполняемые процедуры и процедуры выбора (селективные процедуры). Подробности о различиях в технике написания и использования этих стилей процедур см. в главах 28-30.
Выполняемые процедуры
В DSQL оператор EXECUTE PROCEDURE выполняет (вызывает) выполняемую хранимую процедуру - хранимую процедуру, созданную для выполнения некоторых операций на сервере, - возвращая (необязательно) одну строку из одного или более значений. Оператор для выполнения подобных процедур имеет следующий общий формат:
EXECUTE PROCEDURE ИМЯ-процедуры
[(<список входных значений>)
Следующий простой пример иллюстрирует вызов выполняемой процедуры, которая принимает два входных аргумента, выполняет некоторые действия на сервере и завершает работу:
EXECUTE PROCEDURE DO_IT(49, '25-DEC-2004');
В приложениях более мощным средством является использование параметров (см. разд. "Использование параметров") в операторах запросов, которые выполняют хранимые процедуры, например:
EXECUTE PROCEDURE DO_IT(:IKEY, :KEPORT_DATE) ;
или
EXECUTE PROCEDURE DO_IT(?, ?);
Процедуры выбора
Хранимые процедуры выбора способны возвращать многострочные наборы данных в ответ на специализированную форму оператора SELECT:
SELECT <список выходных столбцов>
FROM имя-процедуры [ (<список входных значений>) ]
[WHERE <предикаты поиска>]
[ORDER BY <список выходных столбцов>]
В следующем фрагменте PSQL хранимая процедура принимает один ключ в качестве входного параметра и возвращает множество строк. Предложение RETURNS определяет выходной набор:
CREATE PROCEDURE GET_COFFEE_TABLE (IKEY INTEGER)
RETURNS (
BRAND_ID INTEGER,
VARIETY_NAME VARCHAR(40),
COUNTRY_OF_ORIGIN VARCHAR(30))
AS . . . . . .
Приложение получает выходной набор из хранимой процедуры следующим образом:
SELECT BRAND_ID, VARIETY_NAME, COUNTRY_OF_ORIGIN FROM GET_COFFEE_TABLE (5002) ;
Тот же самый пример с параметризованным входным аргументом:
SELECT BRAND_ID, VARIETY_NAME, COUNTRY_OF_ORIGIN FROM GET_COFFEE_TABLE(:IKEY);/* Delphi */
или
SELECT BRAND_ID, , VARIETY_NAME, COUNTRY_OF_ORIGIN FROM GET_COFFEE_TABLE(?);