Пример 21: вставка данных
В Oracle такая небольшая разница во времени работы двух представленных вариантов обусловлена тем, что, фактически, это один и тот же вариант, только записанный разными способами. В этой СУБД тоже можно добиться очень высокой производительности вставки данных, но это достигается более
сложными способами9.
( |
Для повышения надёжности операций вставки рекомендуется после их |
выполнения получать на уровне приложения информацию о том, какое |
|
|
количество рядов было затронуто операцией. Если полученное число не |
|
совпадает с числом переданных на вставку строк, где-то произошла |
|
ошибка. |
& Задание 2.3.1 .TSK.A: добавить в базу данных информацию о троих новых читателях: «Орлов О.О.», «Соколов С.С.», «Беркутов Б.Б.»
Задание 2.2.1 .TSK.B: отразить в базе данных информацию о том, что каждый из добавленных в задании 2.3.1.TSK.A читателей 20-го января 2016го года на месяц взял в библиотеке книгу «Курс теоретической физики».
& Задание 2.2.1.TSK.C: добавить в базу данных пять любых авторов и десять книг этих авторов (по две на каждого); если понадобится, добавить в базу данных соответствующие жанры. Отразить авторство добавленных книг и их
принадлежность к соответствующим жанрам.
9 http://www.oracle.com/technetwork/issue-archive/2012/12-sep/o52plsql-1709862.html
Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 200/545
Пример 22: обновление данных
Типичная ошибка: разобрать дату на строковые фрагменты, получить числовое представление месяца, добавить к нему нужное «смещение», преобразовать назад в строку, и «собрать» новую дату. Представьте, что к 15-му декабря 2011-го года надо добавить шесть месяцев: 2011-12-15 ^ 2011-18-15.
Получился 18-й месяц, что несколько нелогично. С отрицательными смещениями получается ещё более «забавная» картина.
Вывод: операции с добавлением или вычитанием временных интервалов нужно производить с помощью специальных средств, умеющих учитывать годы, месяцы, дни, часы, минуты, секунды и т.д.
Во всех трёх СУБД решения достаточно просты и реализуются идентичным образом, за исключением специфики функций приращения даты.
Для повышения надёжности операций обновления рекомендуется после их выполнения получать на уровне приложения информацию о том, какое количество рядов было затронуто операцией. Если полученное число не совпадает с ожидаемым, где-то произошла ошибка.
Да, мы не всегда можем заранее знать, сколько записей затронет обновление, но всё же существуют случаи, когда это известно (например, библиотекарь отметил чек-боксами некие три выдачи и нажал «Книги возвращены», значит, обновление должно затронуть три записи).
&Задание 2.3.2.TSK.A: отметить все выдачи с идентификаторами <50 как возвращённые.
&Задание 2.2.2.TSK.B: для всех выдач, произведённых до 1-го января 2012-го года, уменьшить значение дня выдачи на 3.
Задание 2.2.2.TSK.C: отметить как невозвращённые все выдачи, полученные читателем с идентификатором 2.
Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 203/545
Пример 23: удаление данных
2.3.3. Пример 23: удаление данных
Задача 2.3.3.a{193}: удалить информацию о том, что читатель с идентификатором 4 взял 15-го января 2016-го года в библиотеке книгу с идентификатором 3.
Задача 2.3.3. b{193}: удалить информацию обо всех посещениях библиотеки читателем с идентификатором 3 по воскресеньям.
Ожидаемый результат 2.3.3.a:b следующаяие записьи должнаыббытьудалена.
удалены.
sb_id |
sb_subscriber |
sb_book |
sb_start |
sb_finish |
sb_is_active |
62101 |
43 |
53 |
20146-081-0315 |
20146-1001-0330 |
YN |
86 |
3 |
1 |
2014-08-03 |
2014-09-03 |
Y |
Решение 2.3.3.a{193}.
В данном случае решение тривиально и одинаково для всех трёх СУБД за исключением синтаксиса формирования значения поля sb_start.
Внимательно следите за тем, чтобы ваши запросы на удаление данных содержали условие (в этой задаче — строки 2-4 всех трёх запросов). DE- LETE без условия удалит все записи в таблице, т.е. вы потеряете все данные.
Решение 2.3.3.b{193}.
В решении{39} задачи 2.1.7.b{39} мы подробно рассматривали, почему в условиях, затрагивающих дату, выгоднее использовать диапазоны, а не извлекать фрагменты даты, и оговаривали, что могут быть исключения, при которых диапазонами обойтись не получится. Данная задача как раз и является таким исключением: нам
Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 204/545