Обработка NULL-значений во встроенном SQL


1) Проблемы работы с NULL-значениями
NULL – это специальные маркеры, определенные в SQL. Попытка присвоить NULL переменным HOST-языка приведет к ошибке, поскольку они не поддерживают NULL-значений. Для устранения таких ошибок используют индикаторы переменных. Их используют не только при чтении, но и при изменении данных в таблицах БД.

2) Индикаторы значений
Индикаторы переменных, как и остальные переменные, объявляются в разделе объявления переменных SQL. Они имеют тип, определенный в HOST-языке и соответствуют числовому типу. Как только выполняется операция, которая может поместить NULL-значение в переменные HOST-языка, следует использовать индикатор переменной в качестве меры предосторожности. Он размещается в SQL-операторе непосредственно после переменной HOST-языка после разделительного двоеточия (:). При желании можно указать необязательное ключевое слово INDICATOR. Перед выполнением SQL-оператора индикатору присваивается начальное значение 0. Если в процессе выполнения SQL-оператора переменная получает NULL-значение, то индикатор принимает отрицательное значение. Положительное значение индикатора свидетельствует о предупреждении, например, при округлении или усечении данных.

3) Пример обработки NULL-значений

exec sql open cursor CurCust; — Выполняем курсор
while (sqlca.sqlcode==0) {
exec sql fetch CurCust into :Id_num, :SalesPerson, :Loc :i_a, :Comm
indicator :i_b; — i_a, i_b — Индикаторы NULL-значений
if(i_a>=0 && i_b>=0)
exec sql update SalesPeople set Comm=Comm+.01
where current of CurCust; — Данные для обновления взять из курсора
else {
if(i_a<0) printf(“Покупатель = “, Id_num, “Город не указан“); if(i_b<0) printf(“Покупатель = “, Id_num, “Комиссионные не указаны“); } } exec sql close cursor CurCust; - Закрываем курсор

4) Пример на добавление данных
Индикатор переменной можно использовать для назначения NULL-значений при выполнении операторов UPDATE и DELETE. Если индикатор переменной имеет отрицательное значение, то в соответствующее поле таблицы следует поместить NULL.

exec sql insert into SalesPeople values (:Id_num, :SalesPerson, :Loc :i_a, :Comm :i_b);


Комментарии запрещены.




Статистика