SQL1

       

ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННОЙ INDICATOR ДЛЯ ЭМУЛЯЦИИ NULL-ЗНАЧЕНИЙ SQL


Другая возможность состоит в том, чтобы обрабатывать переменную indicator, связывая её с каждой переменной главного языка, специальным способом, эмулирующим поведение 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 нужны здесь только для понимания}



Содержание раздела