Распечатать страницу

NULL в командах и встроенных функциях VFP

« Назад

Основные правила обработки NULL:

  • команды, получив NULL в качестве параметра, генерируют ошибку (имеются исключения, например команда STORE);

  • функция (процедура), если параметр может быть NULL, передает NULL результату, если не может – генерирует ошибку;

  • функции ISBLANK( ), ISDIGIT( ), ISLOWER( ), ISUPPER( ), ISALPHA( ) и EMPTY( ), получив NULL, возвращают .F.;

  • команды INSERT – SQL и SELECT – SQL обрабатывают NULL-величины и помещают их в записи, если соответствующие поля принимают NULL;

  • SQL-агрегатные функции NULL игнорируют;

  • VFP-агрегатные функции, например функция SUM( ) команды CALCULATE, вернут 0, если все обрабатываемые величины – это NULL. В противном случае NULL игнорируется.

Пример 1. NULL как параметр встроенных функций.

store .NULL. to n

? Left('abc', n)                     && Напечатает: .NULL.

? Left(.NULL., 1)                && Напечатает: .NULL.

? At('abc', .NULL.)             && Напечатает: .NULL.

? Sin(n)                               && Напечатает: .NULL.

Пример 2. NULL как параметр команд.

store .NULL. to n

use Authors in (n)               && Генерирует ошибку

select Test                           && Таблица Test открыта

average TestFloat next n to avgValue       && Генерирует ошибку

Пример 3. Поле TestFloat таблицы Test определено в соответствии с рис. 3.1.

31.1.-Поле-TestFloat-таблицы-Test

Рис. 3.1. Поле TestFloat таблицы Test

Во всех записях, кроме одной, таблицы в поле TestFloat находится NULL. Единственная запись, отличная от NULL, имеет значение 1.000.

calculate Sum(TestFloat) to sumValue

? sumValue                         && Напечатает: 1.00

&& Выберет поле TestFloat всех записей

select TestFloat from Test

&& Формирует курсор с одной записью, имеющей значение 1.000

select Sum(TestFloat) from Test.