
БД - Лекция 11 (встроенный SQL).ppt
- Количество слайдов: 18
БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ Встраиваемый SQL
Вложенный SQL Нужно использовать пакет программ который бы обеспечивал поддержку вложения SQL в основной язык Команды SQL помещаются в исходный текст программы. Командам SQL предшествует фраза EXEC SQL (EXECute SQL)
Переменные Объявляются в SQL DECLARE SESSION (раздел объявлений) Должны иметь совместимый тип В SQL команде переменной предшествует двоеточие
Переменные EXEC SQL BEGIN DECLARE SECTION; Var id_num: integer; name: array [1. . 40] of char; EXEC SQL END DECLARE SECTION;
Переменные SQL и части базового языка обмениваются значениями через переменные EXEC SQL INSERT INTO Departaments VALUES ( : id_num, : name)
Переменные while not eof (f) do begin readln(f, name); EXEC SOL INSERT INTO Departaments VALUES ( seq_depart. NEXTVAL, : name) ; end;
Переменные Запрос должен извлекать только ОДНУ строчку EXEC SQL SELECT name, surname INTO : Sname, : Ssurname FROM Students WHERE id_num = 123456;
Курсоры Курсор – переменная, связанная с запросом. Значением курсора может быть каждая строка, которая выводится при запросе. Строки курсора упорядочены. Курсоры управляются следующими командами: DECLARE – объявить OPEN - открыть FETCH – выбрать строку CLOSE - закрыть
Курсоры EXEC SQL DECLARE CURSOR Students 3 k FOR SELECT id_num, name, surname FROM Students WHERE Course = 3; EXEC SQL OPEN CURSOR Students 3 k; FETCH Students 3 k INTO : id_num, : name, : surname; EXEC SQL CLOSE CURSOR Students 3 k;
Обработка ошибок SQLCODE – числовой код SQLSTATE – строка из 5 символов (2 -класс, 3 - подкласс) Варианты значений 1. Успешное завершение без ошибок и предупреждений 2. Успешное завершение с предупреждением 3. Ошибка
SQLCODE Значения: 0 - успешное завершение без ошибок и предупреждений 100 - успешное завершение с предупреждением (NOT FOUND, NO DATE) Число < 0 - ошибка
NOT FOUND, NO DATE SELECT: запрос не выбрал ни одной строки FETCH: последняя строка уже была выбрана, или ни одной строки не выбрано запросом в курсоре INSERT: ни одной строки не было вставлено UPDATE или DELETE: ни одна строка не ответила условию предиката
SQLSTATE Значения: ‘ 00000’ - успешное завершение без ошибок и предупреждений Класс ’ 01’ - успешное завершение с предупреждением Класс ’ 02’ - NOT FOUND Класс > ’ 02’ - ошибка
Курсоры EXEC SQL OPEN CURSOR Students 3 k; EXEC SQL FETCH Students 3 k INTO : id_num, : name, : surname; while SQLSTATE = ‘ 00000’ do begin writeln (id_num, name, surname); EXEC SQL FETCH Students 3 k INTO : id_num, : name, : surname; end; EXEC SQL CLOSE CURSOR Students 3 k;
Курсоры EXEC SQL OPEN CURSOR Students 5 k; while not SQLCODE = 100 do begin EXEC SQL FETCH Students 5 k INTO : id_num, : name, : surname; EXEC SQL DELETE FROM Students WHERE CURRENT OF Students 5 k; end; EXEC SQL CLOSE CURSOR Students 5 k;
Курсоры EXEC SQL OPEN CURSOR Students 3 k; while not SQLCODE = 100 do begin EXEC SQL FETCH Students 3 k INTO : id_num, : name, : surname; EXEC SQL UPDATE Students SET Course = Course+1 WHERE CURRENT OF Students 3 k; end; EXEC SQL CLOSE CURSOR Students 3 k;
Индикаторные переменные Объявляются в разделе объявлений SQL Имеют тип главного языка, соответствующий числовому типу в SQL Значения: изначально 0 отрицательное число, если производится значение NULL
Индикаторные переменные EXEC SQL OPEN CURSOR Students 3 k; while SQLCODE = 0 do begin EXEC SQL FETCH Students 3 k INTO : id_num, : name: i_n, : surname. INDl. CATOR: i_sn; If (i_n > = 0) and (i_sn > = 0) {not NULL} then ………………… else {NULL} begin If i_n < 0 then writeln (‘Студент ', id_num, ' не имеет имени'); If i_sn < 0 then writeln (' Студент ', id_num, ' не имеет фамилии'); end; {else} end; {while} EXEC SQL CLOSE CURSOR Students 3 k;
БД - Лекция 11 (встроенный SQL).ppt