Определение значений
Переменные
Прекрасно, когда при работе с базами данных можно манипулировать литералами и другими константами. Однако полезно иметь и переменные. Во многих случаях, не имея переменных, приходится делать намного больше работы. Переменная – это такая величина, значение которой может изменяться. Чтобы увидеть, почему переменные так полезны, рассмотрим следующий пример.
Предположим, что вы розничный продавец, у которого есть покупатели нескольких категорий. Тем из них, кто покупает товары в больших объемах, вы продаете эти товары по самым низким ценам. Тем же, кто покупает в средних объемах, вы продаете товары по ценам более высокого порядка. И наконец, те, кто ограничивается при покупках малыми объемами шаров, платят самую высокую цену. Вы хотите, чтобы все розничные цены имели определенные коэффициенты по отношению к той стоимости, в какую товары обошлись вам. Для своего товара F-117A вы решили, что покупатели товаров в больших объемах (покупатели класса С) будут за него платить в 1.4 раза больше, чем платите за этот товар вы. А покупатели товаров в средних объемах (покупатель класса В) будут уже платить в 1.5 раза больше. И наконец, покупатели товаров в малых объемах (покупатели класса А) – в 1.6 раза больше.
Вы храните значения стоимости товаров и назначаемых вами цен в таблице, которую вы назвали PRICING (ценообразование). Среди ее полей имеются такие: PRICE (цена), COST (стоимость), PRODUCT (продукт) и CLASS (класс). Чтобы реализовать свою новую структуру ценообразования, вы отправляете на выполнение следующие команды языка SQL:
UPDATE PRICING SET Price = Cost * 1.4 WHERE Product = 'F-117A' AND Class = 'C; UPDATE PRICING SET Price = Cost * 1.5 WHERE Product = 'F-117A' AND Class = 'B'; UPDATE PRICING SET Price = Cost * 1.6 WHERE Product = 'F-117A' AND Class = 'A';
Этот код прекрасный и пока что подходит для ваших нужд. А что если энергичные усилия конкурентов начинают подрывать ваш сектор рынка? Чтобы остаться на плаву, вам, возможно, придется уменьшить установленные вами значения разницы в ценах. Тогда потребуется ввести нечто похожее на строки следующих команд:
UPDATE PRICING SET Price = Cost * 1.25 WHERE Product = 'F-117A' AND Class = 'C; UPDATE PRICING SET Price = Cost * 1.35 WHERE Product = 'F-117A' AND Class = 'B'; UPDATE PRICING SET Price = Cost * 1.45 WHERE Product = 'F-117A' AND Class = 'A';
Если ваш рынок изменчив, то вам придется время от времени переписывать свой SQL-код. Это может потребовать значительных усилий с вашей стороны, особенно если цены указаны во многих местах вашего кода. Эти усилия можно свести к минимуму, если заменить литералы (например, 1.45) переменными (такими, например, как multiplierА). Тогда свои операции обновления вы можете выполнять таким образом:
UPDATE PRICING SET Price = Cost *:multiplierC WHERE Product = 'F-117A' AND Class = 'C; UPDATE PRICING SET Price = Cost *:multiplierB WHERE Product = 'F-117A' AND Class = 'B'; UPDATE PRICING SET Price = Cost *:multiplierA WHERE Product = 'F-117A' AND Class = 'A';
Теперь в любом случае, когда условия на рынке заставят вас менять ценообразование, остается только изменить значения переменных: :multiplierC, :multiplierB и :multiplierA. Эти переменные являются параметрами, передаваемыми SQL-коду, который затем использует полученные переменные, чтобы считать новые цены.
Технические подробности:
Иногда переменные, используемые таким образом, называются параметрами, а иногда – базовыми переменными. Переменные называются параметрами, если они находятся в приложениях, написанных на модульном языке SQL, а базовыми переменными – если используются во встроенном SQL.
Помни:
Встроенный SQL означает, что операторы SQL встроены в код приложения, написанного на процедурном базовом языке. Кроме того, SQL-код можно поместить в модуль SQL. Модуль вызывается приложением, написанным на базовом языке. Каждый из этих двух методов имеет собственные преимущества и недостатки. Какой из них выбрать – это зависит от используемой вами конкретной реализации SQL.