- •Содержание
- •Repository
- •Средства тестирования и анализа
- •Утилита Workbench Organizer
- •Резюме
- •Резюме
- •Резюме
- •Глава 6.Моделирование сущностей и связей
- •Глава 10. Подпрограммы и функции
- •Создание функций увеличения возможности многократного использования текстов
- •Функциональные группы и функции
- •Чтение единственного элемента таблицы
- •Извлечение единственного поля
- •Получение статистической информации
- •Упорядочение результатов запроса
- •Динамическая выборка данных
- •Использование составных критериев выборки Select-Options
- •Динамическое присвоение имен таблиц
- •Вложенные циклы select
- •Представления, определенные в АВАР/4 Dictionary
- •Размер внутренней таблицы
- •Сортировка элементов внутренней таблицы
- •Вставка нескольких строк
- •Изменение таблиц базы данных с помощью команды update
- •Изменение отдельного элемента
- •Изменение нескольких элементов
- •Удаление элементов таблицы базы данных с помощью команды delete
- •Динамическое задание имен таблиц
- •Резюме
- •Временное хранение
- •Пропуск объектов
- •Использование локальных имен для объектов памяти
- •Очистка содержимого объектов памяти
- •Создание отчета
- •Сравнение двух отчетов, разработанных с использованием разных средств
- •Создание программного текста
- •Обработка данных с помощью событий get
- •Что применять: команду select или Logical Databases
- •Задание составных критериев выборки
- •Порядок обработки событий get
- •Работа с несколькими таблицами
- •Глава 16. Пользовательский интерфейс для создания отчетов
- •Определение параметров для экрана выбора
- •События экрана выбора
- •Повышение производительности программы
- •Резюме
- •Детализация объектов
- •Двойной щелчок мышью: событие at line-selection
- •Определение статуса графического интерфейса
- •Проектирование инструментальной линейки приложения
- •Изменение стандартной инструментальной линейки
- •Положение курсора и скрытая информация
- •Команда hide
- •Команда get cursor
- •Фреймы (кадры)
- •Глава 18. Выполнение программы-отчета
- •Вычисление даты в варианте
- •Описание учебной задачи
- •Создание диалоговой программы
- •Создание экрана
- •Задание фрейма с заголовком
- •Работа с сообщениями
- •Вывод сообщения из программы
- •Логический рабочий блок (LUW)
- •Механизм блокировки системы R/3
- •Глава 22. Расширенные функции графического интерфейса
- •Глава 25. Автоматическая генерация программы
- •Связь между программами
- •Вызов удаленной функции
- •Резюме
- •Удаление связей объектов
- •Резюме
- •Приложения
- •Использование Logical Databases при работе с утилитой АВАР/4 Query
- •Простейшие запросы
- •Получение перечня программных элементов
- •Создание заданий (Tasks) и запросы на изменения (Change Requests)
Изменение таблиц базы данных |
|
155 |
|
|
|
|
|
В этом примере customers является рабочей областью по умолчанию, a my_customer — дополнительная запись, которая содержит новые данные и используется в качестве источника информации для команды insert.
Оба этих метода одинаково хороши при включении отдельных строк, но требуют длительной работы программы, если необходимо добавить группу новых строк. Такая ситуация будет рассмотрена ниже.
Вставка нескольких строк
Представим, что нужно включить в таблицу базы новую группу клиентов. Было бы неразумно тратить время на построчную запись в базу информации о клиентах, как это делалось в приведенных выше примерах. Используя внутреннюю таблицу той же структуры, что и таблица базы данных, к которой необходимо добавить новые элементы, можно включить разом целый набор элементов. Это делается с помощью дополнения from table:
Как работает эта программа? Сначала строится внутренняя таблица all_customers, которая имеет ту же структуру, что и таблица customers, затем в нее заносятся новые данные, и, наконец, содержимое внутренней таблицы одной операцией записывается в базу данных. В реальных прикладных программах внутренняя таблица обычно заполняется с помощью оператора select и изменяется в цикле, который записан после select. Далее внутренняя таблица одной операцией переписывается в базу данных. Групповая вставка данных проходит успешно, если все элементы внутренней таблицы могут быть записаны в базу. Если хотя бы один элемент отброшен системой по причине дублирования первичного ключа, вся операция отменяется и программа завершается сообщением об ошибке выполнения.
Этой ошибки можно избежать, если использовать дополнение accepting duplicate keys. В данном случае элемент, значение ключа которого уже присутствует в таблице базы, не будет записан, а остальные элементы окажутся вставленными. Ошибочная ситуация легко идентифицируется, так как системный код возврата не равен нулю, если отброшена хотя бы одна строка. На практике для проверки присутствия в базе дубликата вновь включаемого элемента обычно применяют команду select. Однако, если наличие дублированных ключей крайне маловероятно, лучше воспользоваться конструкцией accepting duplicate keys, которая работает существенно быстрее, чем комбинация операторов select и insert. Напротив, если вероятность дублирования первичного ключа довольно высока, вначале нужно найти дублированные ключи с помощью select и лишь затем вставить уникальные элементы.
Разрешается также добавлять новые элементы с помощью команды modify, которая будет рассмотрена в разделе "Модификация элемента с помощью команды modify". Обычно она используется, если необходимо добавить или изменить элемент независимо от наличия дублирован-
ного ключа.
Для таблицы базы данных, в отличие от внутренних таблиц, невозможно задать номер строки или индекс, куда следует вставить новый элемент. Причина в том, что СУБД реляционной базы данных сама "решает", в какое место вставить строку. С точки зрения программы вопросы типа "Существует ли данный элемент?" или "Каково значение этого элемента?" вполне корректны, а вопросы типа "В каком порядке отсортирована база данных?" или "Где физически располагается элемент?" не имеют смысла. Это является прямым следствием философии реляционных баз данных, согласно которой пользователь может знать только содержимое элемента базы, но не место расположения этого элемента.