Чтение онлайн

на главную - закладки

Жанры

Понимание SQL

Грубер Мартин

Шрифт:

EXEC SQL CLOSE CURSOR Cust_assigns;

{Поэтому мы будем начинать новый вывод в следующий раз через цикл.

Значение в котором мы получим из этого курсора сохраняется в переменной - salesnum.}

EXEC SQL UPDATE Orders

SET snum=:salesnum

WHERE CURRENT OF Wrong_Orders;

end; {Если SQLCODE=0}.

end; { Пока SQLCODE . . . выполнить }

EXEC SQL CLOSE CURSOR Wrong_Orders;

* end; { основная программа }

Для данной программы

которую я использовал, решение будет состоять в том, чтобы просто включить поле onum, первичным ключом таблицы Порядков, в курсор Wrong_Orders. В команде UPDATE, вы будете затем использовать предикат WHERE onum=:ordernum (считая целую переменную - odernum, обьявленной), вместо WHERE CURRENT Of Wrong_Orders.

Результатом будет программа наподобии этой (большинство комментариев из предыдущей программы здесь исключены ):

EXEC SQL BEGIN DECLARE SECTION;

SQLCODE: integer;

odernum integer;

cnum integer;

snum integer;

custnum: integer;

salesnum: integer;

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE Wrong_Orders AS CURSOR FOR

SELECT onum, cnum, snum

FROM Orders a

WHERE snum < >

(SELECT snum

FROM Customers b

WHERE a.cnum=b.cnum);

EXEC SQL DECLARE Cust _ assigns AS CURSOR FOR

SELECT cnum, snum

FROM Customers;

begin { основная программа }

EXEC SQL OPEN CURSOR Wrong_Orders;

while SQLCODE=O do {Цикл до тех пор пока Wrong_Orders не опустеет}

begin

EXEC SQL FETCH Wrong_Orders

INTO (:odernum, :cnum, :snum);

if SQLCODE=O then

begin

EXEC SQL OPEN CURSOR Cust_Assigns;

repeat

EXEC SQL FETCH Cust_Assigns

INTO (:custnum, :salesnum);

until :custnum=:cnum;

EXEC SQL CLOSE CURSOR Cust_assigns;

EXEC SQL UPDATE Orders

SET snum=:salesnum

WHERE CURRENT OF Wrong_Orders;

end; {If SQLCODE=0}

end; { While SQLCODE . . . do }

EXEC SQL CLOSE CURSOR Wrong_Orders;

* end; { main program }

EXEC SQL BEGIN DECLARE SECTION;

SQLCODE integer;

newcity packed array[1. .12] of char;

commnull boolean;

citynull boolean;

response char;

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE CURSOR Salesperson AS

SELECT * FROM SALESPEOPLE;

begln { main program }

EXEC SQL OPEN CURSOR Salesperson;

EXEC SQL FETCH Salesperson

INTO (:snum, :sname, :city:i_cit, :comm:i_com);

{Выборка первой строки}

while SQLCODE=O do

{Пока эти строки в таблице Продавцов.}

begin

if i_com < O then commnull:=true;

if i_cit < O then citynull:=true;

{ Установить логические флаги которые могут показать NULLS.}

if citynull then

begin

write ('Нет текущего значения city

для продавца ',

snum, ' Хотите предоставить хотя бы одно? (Y/N)');

{Подсказка покажет значение city состоящее из NULL значений.}

read (ответ);

{Ответ может быть сделан позже.}

end {если конечно - citynull}

else { не citynull }

begin

if not commnull then

{ Чтобы выполнять сравнение и операции только для не-NULL значений связи }

begin

if city='London' then comm:=comm * .02 * .02

else comm:=comm + .02;

end;

{Даже если значение и не - commnull, begin и end здесь для ясности.}

write ('Текущий city для продавца',

snum, 'есть', city,

* Хотите его изменить? (Y/N)');

Обратите Внимание: Продавец не назначеный в данное время в определенный город, не будет иметь изменений комиссионых при определении находятся ли он в Лондоне.

read (ответ);

{Ответ теперь имеет значение независимо от того что citynull - верен или неверен.}

end; {иначе не citynull}

if response='Y' then

begin

write ('Введите новое значение city:');

read (newcity);

if not commnull then

{Эта операция может быть выполнена только для не-NULL значений. }

case newcity of:

begin

'Barcelona':comm:=comm + .01,

'San Jose': comm:=comm *.01

end; {случно и если не commnull}

EXEC SQL UPDATE Salespeople

SET city=:newcity, comm=:comm:i_com

WHERE CURRENT OF Salesperson;

{Переменная индикатора может поместить NULL значение в поле comm если так назначено.}

end; { Если ответ='Y', или если ответ < > 'Y',

изменений не будет. }

EXEC SQL FETCH Salesperson

INTO (:snum, :sname, :city:i_clt,

:comm:l_com);

{выборка следующей строки}

end; {если SQLCODE=0}

EXEC SQL CLOSE CURSOR Salesperson;

* end; {основной программы}

Приложение B. ТИПЫ ДАННЫХ В SQL

ТИПЫ ДАННЫХ РАСПОЗНАВАЕМЫЕ С ПОМОЩЬЮ ANSI, состоят из символов и различных типов чисел, которые могут классифицироваться как точные числа и приблизительные числа. Точные числовые типы - это номера, с десятичной точкой или без десятичной точки. Приблизительные числовые типы - это номера в показательной (экспоненциальной по основанию - 10) записи.

Поделиться:
Популярные книги

Печать Пожирателя

Соломенный Илья
1. Пожиратель
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Печать Пожирателя

Привет из Загса. Милый, ты не потерял кольцо?

Лисавчук Елена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Привет из Загса. Милый, ты не потерял кольцо?

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

У врага за пазухой

Коваленко Марья Сергеевна
5. Оголенные чувства
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
У врага за пазухой

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит