WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Использование SQL с другим языком (вложенный SQL). Переменная INDICATOR

Использование SQL с другим языком (вложенный SQL). Переменная INDICATOR


Дата публикации: 13-07-2008

Пустые (NULLS) значения - это специальные маркеры определяемые самой SQL. Они не могут помещаться в главные переменные. Попытка вставить NULL значения в главнуюпеременную будет некорректна, так как главные языки не поддерживают NULL значений в SQL, по определению. Хотя ре- зультат при попытке вставить NULL значение в главную переменную опре- деляет проектировщик, этот результат не должен ротиворечить теории ба- зы данных, и поэтому обязан произвести ошибку: код SQLCODE ввиде отри- цательного числа, и вызвать подпрограмму управления ошибкой. Естеcт- венно вам нужно этого избежать. Поэтому, вы можете выбрать NULL значе- ния с допустимыми значениями, не приводящими к разрушению вашей прог- раммы. Даже если программа и не разрушится, значения в главных пере- менных станут неправильными, потому что они не могут иметь NULL значе- ний. Альтернативным методом предоставляемым для этой ситуацией являет- ся - функция переменной indicator(указатель). Переменная indicator - обьявленная в разделе объявлений SQL напоминает другие переменные. Она может иметь тип главного языка который соответствует числовому типу в SQL. Всякий раз, когда вы выполняете операцию, которая должна помес- тить NULL значение в переменную главного языка, вы должны использовать переменную indicator, для надежности. Вы помещаете переменную indica- tor в команду SQL непосредственно после переменной главного языка ко- торую вы хотите защитить, без каких-либо пробелов или запятых, хотя вы и можете, при желании, вставить слово - INDICATOR. Переменной indica- tor в команде, изначально присваивается значение 0. Однако, если про- изводится значение NULL , переменная indicator становится равной отри- цательному числу. Вы можете проверить значение переменной indicator, чтобы узнать, было ли найдено значение NULL. Давайте предположим, что поля city и comm, таблицы Продавцов, не имеют ограничения NOT NULL, и что мы объявили вразделе обьявлений SQL, две ПАСКАЛЬевские переменные целого типа, i_a и i_b. ( Нет ничего такого в разделеобьявлений, что могло бы представить их как переменные indicator. Они станут перемен- ными indicator, когда будут использоваться как переменные indicator. )

 

Имеется одна возможность:

 

EXEC SQL OPEN CURSOR High_cust;

while SQLCODE = O do

begin

EXEC SQL FETCH High_cust

INTO :id_num, :salesperson,

:loc:i_a, :commINDlCATOR:i_b;

If i_a > = O and i_b > = O then

{no NULLs produced}

EXEC SQL UPDATE Salespeople SET comm = comm + .01

WHERE CURRENT OF Hlgh_cust;

else

{one or both NULL}

begin

If i_a < O then

writeln ('salesperson ', id_num, ' has no city');

If i_b < O then

writeln ('salesperson ', id_num, ' has no

commission');

end;

{else}

end; {while}

EXEC SQL CLOSE CURSOR High_cust;

 

Как вы видите, мы включили, ключевое слово INDICATOR в одном случае, и исключили его в другом случае, чтобы показать, что эффект будет оди- наковым в любом случае. Каждая строка будет выбрана, но команда UPDATE выполнится только если NULL значения не будут обнаружены. Если будут обнаружены NULL значения, выполнится еще одна часть программы, которая распечатает предупреждающее сообщение, где было найдено каждое NULL значение. Обратите внимание: переменные indicator должны проверяться в главном языке, как указывалось выше, а не в предложении WHERE команды SQL. Последнее в принципе не запрещено, но результат часто бывает непред- виденным.

Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Yoggi Berra:

"В теории, теория и практика неразделимы. На практике это не так."

Опрос

Какими социальными сетями Вы пользуетесь?

Vkontakte.ru
Одноклассники
Мой Мир - mail.ru
Google Plus
Facebook
ЖЖ
Другие
Не пользуюсь