Скачать презентацию БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ Встраиваемый Скачать презентацию БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ Встраиваемый

БД - Лекция 11 (встроенный SQL).ppt

  • Количество слайдов: 18

БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ Встраиваемый SQL БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ Встраиваемый SQL

Вложенный SQL Нужно использовать пакет программ который бы обеспечивал поддержку вложения SQL в основной Вложенный SQL Нужно использовать пакет программ который бы обеспечивал поддержку вложения SQL в основной язык Команды SQL помещаются в исходный текст программы. Командам SQL предшествует фраза EXEC SQL (EXECute SQL)

Переменные Объявляются в SQL DECLARE SESSION (раздел объявлений) Должны иметь совместимый тип В SQL Переменные Объявляются в SQL DECLARE SESSION (раздел объявлений) Должны иметь совместимый тип В SQL команде переменной предшествует двоеточие

Переменные EXEC SQL BEGIN DECLARE SECTION; Var id_num: integer; name: array [1. . 40] Переменные 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 Переменные SQL и части базового языка обмениваются значениями через переменные EXEC SQL INSERT INTO Departaments VALUES ( : id_num, : name)

Переменные while not eof (f) do begin readln(f, name); EXEC SOL INSERT INTO Departaments Переменные 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 : Переменные Запрос должен извлекать только ОДНУ строчку 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 Курсоры 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 -класс, Обработка ошибок SQLCODE – числовой код SQLSTATE – строка из 5 символов (2 -класс, 3 - подкласс) Варианты значений 1. Успешное завершение без ошибок и предупреждений 2. Успешное завершение с предупреждением 3. Ошибка

SQLCODE Значения: 0 - успешное завершение без ошибок и предупреждений 100 - успешное завершение SQLCODE Значения: 0 - успешное завершение без ошибок и предупреждений 100 - успешное завершение с предупреждением (NOT FOUND, NO DATE) Число < 0 - ошибка

NOT FOUND, NO DATE SELECT: запрос не выбрал ни одной строки FETCH: последняя строка NOT FOUND, NO DATE SELECT: запрос не выбрал ни одной строки FETCH: последняя строка уже была выбрана, или ни одной строки не выбрано запросом в курсоре INSERT: ни одной строки не было вставлено UPDATE или DELETE: ни одна строка не ответила условию предиката

SQLSTATE Значения: ‘ 00000’ - успешное завершение без ошибок и предупреждений Класс ’ 01’ SQLSTATE Значения: ‘ 00000’ - успешное завершение без ошибок и предупреждений Класс ’ 01’ - успешное завершение с предупреждением Класс ’ 02’ - NOT FOUND Класс > ’ 02’ - ошибка

Курсоры EXEC SQL OPEN CURSOR Students 3 k; EXEC SQL FETCH Students 3 k Курсоры 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 Курсоры 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 Курсоры 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 Имеют тип главного языка, соответствующий числовому типу в SQL Значения: изначально 0 отрицательное число, если производится значение NULL

Индикаторные переменные EXEC SQL OPEN CURSOR Students 3 k; while SQLCODE = 0 do Индикаторные переменные 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;