Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БАЗЫ ДАННЫХ. курсовая на OpenOffice.doc
Скачиваний:
16
Добавлен:
23.11.2018
Размер:
1.75 Mб
Скачать

Пакеты запросов на изменение

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

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

Правильный подход в этой ситуации:

  1. Доработать базу данных и программу, с ней взаимодействующую на модельной базе.

  2. Потребовать специальный сервер для создания стенда и скопировать на него действующую в данный момент базу данных.

  3. Написать последовательность SQL запросов, вносящих все необходимые изменения в базу данных.

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

  5. Оттестировать работу программы с полученной базой данных

  6. Еще раз перенести рабочую базу на сервер, прогнать все изменения пакетом. Оценить время выполнения пакета на реальном сервере. Допустимо ли приостанавливать систему на это время. Возможно, придется переписать часть запросов. Например, заранее записать результаты медленных запросов во временные таблицы.

  7. Сохранить реальную базу и только потом выполнять пакет запросов.

Пакеты запросов, формируемые select запросами

Бывают случаи, когда сложно написать запрос на изменение или добавление не очень большого множества записей. Или запрос на изменение выполняется долго, а СУБД на все это время блокирует доступ к изменяемой таблице и не дает работать другим пользователям.

В этих и других случаях удобно подготовить пакет простых, быстро выполняемых запросов на изменение единственной записи с помощью SELECT запроса и выполнить этот пакет.

Часто удобно написать SELECT запрос, который выдает строки, представляющие собой SQL запросы, изменяющие или добавляющие одну запись, а затем выполнить полученный пакет запросов.

Например, запишем в таблицу «Студент» наименования предметов, по которым они получили «5».

Добавьте в таблицу «Студент» колонку «BEST»

ALTER TABLE "Студент" ADD COLUMN BEST VARCHAR(255) DEFAULT ''

Выполняем запрос на выборку данных

SELECT 'UPDATE "Студент" SET BEST=BEST||''' || "Предмет"."Наименование" || ''' WHERE "№ зачетки"= ''' || "Студент"."№ зачетки" || ''';'

FROM

"Результат" AS "Результат",

"Студент" AS "Студент",

"Ведомость" AS "Ведомость",

"Предмет" AS "Предмет"

WHERE

"Результат"."Студент" = "Студент"."№ зачетки" AND

"Результат"."Ведомость" = "Ведомость"."Код" AND

"Ведомость"."Предмет" = "Предмет"."Код" AND

"Результат"."Оценка" = 5

Обратите внимание:

Фрагменты результирующего SQL выражения (помечены красным) заключаются в апострофы и склеиваются с данными из таблиц с помощью «||»

Апострофы, которые я хочу получить в результирующей строке, удвоены «''».

Номер зачетки должен быть строкой, и поэтому перед и после ее значения добавлены удвоенные апострофы «''' || "Студент"."№ зачетки" || '''»

В конце каждого запроса добавляется «;»

Если ничего не поняли, посмотрите, что должно получиться в результате этого запроса. Это будет множество строк, представляющих собой SQL запросы:

UPDATE "Студент" SET BEST=BEST||' Математика ' WHERE "№ зачетки"= '001';

UPDATE "Студент" SET BEST=BEST||' Физика ' WHERE "№ зачетки"= '001';

UPDATE "Студент" SET BEST=BEST||' Математика ' WHERE "№ зачетки"= '022';

Выполним эти запросы

Первый запрос добавит студенту с номером зачетки 001 в поле BEST к пустой строке, содержащейся в этой записи текст «Математика»

Второй запрос добавит студенту с номером зачетки 002 в поле BEST к строке «Математика», содержащейся в этой записи текст «Физика»

Третий запрос добавит студенту с номером зачетки 022 в поле BEST к пустой строке, содержащейся в этой записи текст «Математика»

В результате выполнения этих запросов у студента с номером зачетки 001 в колонке BEST будет «Математика Физика» а у студента с номером зачетки 022 «Математика»

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