Другая возможность состоит в том, чтобы обрабатывать переменную in- dicator, связывая ее с каждой переменной главного языка, специальным способом, эмулирующим поведение NULL значений SQL. Всякий раз, когда вы используете одно из этих значений в вашей прог- рамме, например в предложении if ... then, вы можете сначала проверить связанную переменную indicator, является ли ее значение=NULL. Если это так, то вы обрабатываете переменную по-другому. Например, если NULL значение было извлечено из поля city для главной переменной city, ко- торая связана с переменной indicator - i_city, вы должны установить значение city равное последовательности пробелов. Это будет необходи- мо, только если вы будете распечатывать его на принтере; его значение не должно отличаться от логики вашей программы. Естественно, i_city автоматически установливается в отрицательное значение. Предположим, что вы имели следующую конструкцию в вашей программе:
If sity = 'London' then
comm: = comm + .01
else comm: = comm - .01
Любое значение, вводимое в переменную city, или будет равно "London" или не будет равно. Следовательно, в каждом случае значение комиссион- ных будет либо увеличино либо уменьшено. Однако, эквивалентные команды в SQL выполняются по разному:
EXEC SQL UPDATE Salespeople
SET comm = comm + .01
WHERE sity = 'London';
и
EXEC SQL UPDATE Salespeople
SET comm = comm .01;
WHERE sity < > 'London';
( Вариант на ПАСКАЛе работает только с единственным значением, в то время как вариант на SQL работает со всеми таблицами. )
Если значение city в варианте на SQL будет равно значению NULL , оба предиката будут неизвестны, и значение comm, следовательно, не будет изменено в любом случае. Вы можете использовать переменную indicator чтобы сделать поведение вашего главного языка непротиворечащим этому, с помощью создания усло- вия, которое исключает NULL значения:
If i_city > = O then
begin
If city = 'London' then comm: =
comm + .01
else comm: = comm - .01;
end;
{begin and end нужны здесь только для понимания}
--------------------------------------------------------------
ПРИМЕЧАНИЕ: Последняя строка этого примера сожержит ремарку - { begin и end необходимы только для понимания }
--------------------------------------------------------------
В более сложной программ, вы можете захотеть установить Булеву пере- менную в "верно" , чтобы указать что значение city =NULL. Затем вы мо- жете просто проверять эту переменную всякий раз, когда вам это необхо- димо.