Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Использование параметров

Использование параметров

"Непараметризованный" запрос использует константы в выражениях для условий поиска. Например, в запросе

SELECT MAX(COST * QUANTITY)

AS BEST_SALE FROM SALES

WHERE SALESEDATE > '31.12.2003' ;

будут обработаны те строки таблицы SALES, у которых дата в SALES_DATE более поздняя, чем последний день 2003 года.

Средства разработки доступа к данным, использующие API Firebird, имеют возможность обрабатывать константы в условиях поиска как заменяемые параметры. API позволяет передавать на сервер оператор в виде шаблона, представляющего эти параметры как заполнители, которые могут заменяться конкретными значениями. Клиент запрашивает подготовку (prepare) оператора - проверка синтаксиса и метаданных - без фактического его выполнения.

Приложение DSQL может создать оператор с динамическими условиями поиска в предложении WHERE, один раз подготовить его, а затем присваивать параметрам значения один или много раз непосредственно перед каждым выполнением. Такую возможность иногда называют динамическим связыванием. Средства разработки приложений отличаются по тем способам, которыми они реализуют динамическое связывание параметров во включающем языке. В зависимости от того, какое средство разработки вы используете, параметризованная версия последнего примера может выглядеть несколько иначе, например, так:

SELECT MAX (COST * QUANTITY) AS BEST_SALE

FROM SALES

WHERE SALES_DATE > ? ;

Заменяемый параметр в этом примере позволяет приложению подготовить оператор, а затем получать от пользователя (или от некоторой другой части приложения) фактическую дату, по которой запрос должен быть отфильтрован. Этот запрос может выполняться произвольное количество раз в одной и той же транзакции или в последовательности транзакций с различными значениями даты без необходимости повторной подготовки.

API "знает" порядок и формат параметров, потому что приложение передает описательные структуры XSQLDA, которые содержат массив SQLVAR- дескрипторы переменных, описывающих каждый параметр, - и другие данные, описывающие массив в целом.

Delphi и другие объектно-ориентированные реализации API используют методы и свойства классов, чтобы скрыть от разработчика механизм, применяемый для создания и управления сырым оператором и дескрипторами. Другие средства разработки кодируют эти структуры иным образом. Оператор может передаваться на сервер приблизительно в таком виде:

INSERT INTO DATATABLE (DATAl, DATA2, DATA3, DATA4, DATA5,... другие столбцы)

VALUES (?, '?', '?', ?, ?, ... другие значения);

Если параметры реализованы в языке программирования вашего приложения, то весьма рекомендуется их использовать.

Оглавление книги


Генерация: 0.923. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз