Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы экзамен_2003.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
854.53 Кб
Скачать
  1. Базовая переменная sqlstate.

Единичный SELECT. Получить статус и город для поставщика, чей номер поставки задан базовой переменной Giv#

EXEC SQL SELECT STATUS, CITY

INTO :RANK, :CITY

FROM S

WHERE S# = Giv# ;

Термин «единичный SELECT» используется для обозначения выражения выборки, значением которого будет таблица, содержащая не более одной строки. Если в данном примере существует ровно одна строка в таблице S, удовлетворяющая условию WHERE, то значения STATUS и CITY из этой строки в соответствии с запросом будут присвоены базовым переменным RANK и CITY, а значение SQLSTATE будет равно 00000. Если в таблице S нет ни одной строки, удовлетворяющей условию WHERE, то переменной SQLSTATE будет присвоено значение 02000; а если таких строк больше одной, то будет сгенерирована ошибка и переменная SQLSTATE будет содержать код ошибки.

  1. Операции встроенного sql, не использующие курсоров.

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

«единичный SELECT» INSERT UPDATE (кроме формы CURRENT) DELETE (тоже кроме формы CURRENT)

Единичный SELECT. Получить статус и город для поставщика, чей номер поставки задан базовой переменной Giv#

EXEC SQL SELECT STATUS, CITY

INTO :RANK, :CITY

FROM S

WHERE S# = Giv# ;

Термин «единичный SELECT» используется для обозначения выражения выборки, значением которого будет таблица, содержащая не более одной строки. Если в данном примере существует ровно одна строка в таблице S, удовлетворяющая условию WHERE, то значения STATUS и CITY из этой строки в соответствии с запросом будут присвоены базовым переменным RANK и CITY, а значение SQLSTATE будет равно 00000. Если в таблице S нет ни одной строки, удовлетворяющей условию WHERE, то переменной SQLSTATE будет присвоено значение 02000; а если таких строк больше одной, то будет сгенерирована ошибка и переменная SQLSTATE будет содержать код ошибки.

INSERT. Вставить новую деталь в таблицу Р (номер детали, ее название и вес определены базовыми переменными P#, PNAME, PWT соответственно; цвет и город неизвестны)

EXEC SQL INSERT

INTO P (P#, PNAME, COLOR, WEIGHT, CITY)

VALUES (:P#, :PNAME, DEFAULT, :PWT, DEFAULT) ;

UPDATE. Увеличить статус всех поставщиков из Ростова на значение, определенное базовой переменной Inc.

EXEC SQL UPDATE S

SET STATUS = STATUS + :Inc

WHERE CITY = ‘Ростов’ ;

Если нет строк поставщиков, удовлетворяющих условию WHERE, переменной SQLSTATE присваивается значение 02000.

DELETE. Удалить все поставки для поставщиков из города, определенного базовой переменной CITY

EXEC SQL DELETE

FROM SP

WHERE :CITY =

(SELECT CITY FROM S WHERE S.S# = SP.S#) ;

И снова, если нет строк, удовлетворяющих условию WHERE, , переменной SQLSTATE присваивается значение 02000

  1. Операции, использующие курсоры.

пусть требуется получить информацию для всех поставщиков в городе, определенном базовой переменной Y.

EXEC SQL DECLARE X CURSOR FOR

SELECT S.S#, S.NAME, S.STATUS

FROM S

WHERE S.CITY = :Y;

EXEC SQL OPEN X;

DO for all S rows accessible via X;

EXEC SQL FETCH X INTO :S, :NAME, :STATUS

……….

END;

EXEC SQL CLOSE X;

Оператор DECLARE X CURSOR … определяет курсор с именем Х, связанный с табличным выражением, определенным оператором SELECT, который является частью всего выражения DECLARE. При этом табличное выражение не вычисляется; это происходит только при открытии курсора. Затем для выборки строк из результирующего множества по одной за раз используется оператор FETCH, присваивающий выбранные значения базовым переменным в соответствии со спецификациями в инструкции INTO. Здесь для простоты базовым переменным даны те же имена, что и у соответствующих столбцов базы данных.

Оператор FETCH обычно используется в цикле, поскольку в результирующем множестве большое (и обычно заранее неизвестное) число строк. В данном примере цикл будет повторяться до тех пор, пока не закончатся строки для результирующего множества. При выходе из цикла курсор Х деактивируется.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]