Скачиваний:
20
Добавлен:
01.04.2014
Размер:
180.74 Кб
Скачать

Into :id_num, :salesperson, :loc, :comm;

EXEC SQL UPDATE Salespeople

SET comm = comm + .01

WHERE CURRENT OF High_cust;

end;

EXEC SQL CLOSE CURSOR High_cust;

Обратите внимание: что некоторые реализации требуют, чтобы вы указы-

вали в определении курсора, что курсор будет использоваться для выпол-

нения команды UPDATE на определенных столбцах. Это делается с помо-

щью заключительной фразы определения курсора - FOR UPDATE <column

list>. Чтобы обьявить курсор High_cust таким способом, так чтобы вы мог-

ли модифицировать командой UPDATE столбец comm, вы должны ввести

следующее предложение:

EXEC SQL DECLARE CURSOR High_Cust AS

SELECT *

FROM Salespeople

WHERE snum IN

(SELECT snum

FROM Customers

WHERE rating = 300)

FOR UPDATE OF comm;

ИСПОЛЬЗОВАНИЕ SQL С ДРУГИМ ЯЗЫКОМ (ВЛОЖЕННЫЙ SQL) 349

______________________________________________________________________

Это обеспечит вас определенной защитой от случайных модификаций,

которые могут разрушить весь порядок в базе данных.

========= ПЕРЕМЕННАЯ INDICATOR ==========

Пустые (NULLS) значения - это специальные маркеры определяемые сам-

ой SQL. Они не могут помещаться в главные переменные. Попытка встав-

ить NULL значения в главнуюпеременную будет некорректна, так как гла-

вные языки не поддерживают NULL значений в SQL, по определению. Хо-

тя результат при попытке вставить NULL значение в главную переменную

определяет проектировщик, этот результат не должен ротиворечить теории

базы данных, и поэтому обязан произвести ошибку: код SQLCODE ввиде

отрицательного числа, и вызвать подпрограмму управления ошибкой. Естеc-

твенно вам нужно этого избежать. Поэтому, вы можете выбрать NULL зн-

ачения с допустимыми значениями, не приводящими к разрушению вашей

программы. Даже если программа и не разрушится, значения в главных

переменных станут неправильными, потому что они не могут иметь NULL

значений. Альтернативным методом предоставляемым для этой ситуацией

является - функция переменной indicator(указатель).

Переменная indicator - обьявленная в разделе объявлений SQL напоминает

другие переменные. Она может иметь тип главного языка который соответ-

ствует числовому типу в SQL. Всякий раз, когда вы выполняете операцию,

которая должна поместить NULL значение в переменную главного языка,

вы должны использовать переменную indicator, для надежности.

Вы помещаете переменную indicator в команду SQL непосредственно после

переменной главного языка которую вы хотите защитить, без каких-либо пр-

обелов или запятых, хотя вы и можете, при желании, вставить слово -

INDICATOR.

Переменной indicator в команде, изначально присваивается значение 0.

Однако, если производится значение NULL , переменная indicator станов-

ится равной отрицательному числу. Вы можете проверить значение перем-

енной indicator, чтобы узнать, было ли найдено значение NULL. Давайте

предположим, что поля city и comm, таблицы Продавцов, не имеют ограни-

чения NOT NULL, и что мы объявили вразделе обьявлений SQL, две

350 ПОНИМАНИЕ SQL

______________________________________________________________________

ГЛ. 25

ПАСКАЛЬевские переменные целого типа, i_a и i_b.

( Нет ничего такого в разделеобьявлений, что могло бы представить их

как переменные indicator. Они станут переменными indicator, когда бу-

дут использоваться как переменные indicator. )

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

EXEC SQL OPEN CURSOR High_cust;

while SQLCODE = O do

begin

EXEC SQL FETCH High_cust

Соседние файлы в папке ПОНИМАНИЕ SQL