Иллюстрированный самоучитель по SQL для начинающих

Определение значений

Переменные

Прекрасно, когда при работе с базами данных можно манипулировать литералами и другими константами. Однако полезно иметь и переменные. Во многих случаях, не имея переменных, приходится делать намного больше работы. Переменная – это такая величина, значение которой может изменяться. Чтобы увидеть, почему переменные так полезны, рассмотрим следующий пример.

Предположим, что вы розничный продавец, у которого есть покупатели нескольких категорий. Тем из них, кто покупает товары в больших объемах, вы продаете эти товары по самым низким ценам. Тем же, кто покупает в средних объемах, вы продаете товары по ценам более высокого порядка. И наконец, те, кто ограничивается при покупках малыми объемами шаров, платят самую высокую цену. Вы хотите, чтобы все розничные цены имели определенные коэффициенты по отношению к той стоимости, в какую товары обошлись вам. Для своего товара 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
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.