- •Содержание
- •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)
156 |
Глава 13 |
|
|
|
|
Изменение таблиц базы данных с помощью команды update
Содержимое всех записей таблицы базы можно изменять с помощью команды update, работа с которой напоминает включение новой строки. Команда update также имеет варианты использования: для отдельного элемента и группы элементов.
Изменение отдельного элемента
Возвращаясь к примеру туристического агентства, предположим, что один из клиентов сменил место проживания и в базе данных необходимо изменить название города. Для этого можно написать следующую программу:
Как и для команды insert, описанной в начале главы, краткая версия команды update использует рабочую область customers, заданную в объявлении tables и содержащую измененную информацию. Элемент, задаваемый с помощью ключевых полей, заменяется в базе только в том случае, если в ней содержится элемент с тем же значением ключа. Например, если в базе данных отсутствует элемент с ключом 12345678, то система не добавит информацию в таблицу и системный код возврата sy-subrc будет не равен нулю.
Изменение нескольких элементов
ДЛЯ оператора update, как и для команды insert, можно использовать дополнение from table, позволяющее изменить группу элементов за одну операцию. Например, если имеется внутренняя таблица с модифицированной информацией о клиентах, все изменения могут быть внесены в базу с помощью следующей программы:
Вэтом примере во внутреннюю таблицу changed_customers включены все клиенты, для которых город пока не был задан (например, новые клиенты Brown, Green и White из предыдущих разделов). Облегчить идентификацию клиентов, для которых не был определен город, можно, вставив для каждого из них текст City unknown. Операция коллективного изменения будет успешной, если все элементы внутренней таблицы содержатся в базе данных. В противном случае система возвращает не равный нулю код sy-subrc.
Впредыдущем примере все элементы таблицы базы customers, не имеющие названия города, помещаются во внутреннюю таблицу. После изменения названий городов во внутренней таблице обновленные элементы вновь записываются в базу. В АВАР/4 существует более эффективный вариант операции изменения таблиц базы данных. Он проиллюстрирован в следующей программе, которая выполняет такие же изменения в базе данных, что и программа предыдущего примера:
Вэтом примере после команды update новое значение поля city становится равным City unknown. Так же как для оператора select, в команде update для задания набора изменяемых элементов можно использовать предложение where.
Изменение таблиц базы данных |
157 |
|
|
|
|
Работа оператора select показана в главе 11.
Очевидно, что программный текст, содержащий ключевые слова set и where после оператора update, гораздо легче понять, чем текст предыдущего примера, где применялись внутренние таблицы. Кроме того, такая конструкция выполняется существенно быстрее, чем комбинация операторов select, loop и update. Однако после дополнения set разработчик может использовать только арифметические операции — он не должен применять сложные процедуры, вызывать подпрограммы или передавать диалоговое окно. Таким образом, внутренние таблицы являются более мощным средством и тому же позволяют получить "моментальный снимок" таблицы базы данных.
Приведем другой пример использования базы данных туристического агентства: авиарейс неожиданно отменяется и необходимо перерегистрировать пассажиров на новый рейс. Для этого во всех полях нужно заменить старую дату полета на новую:
В данном случае во всех записях регистрации рейса 1234 компании ABC изменяется его дата — 30/12/1999 на 31/12/1999.
Модификация элемента
с помощью команды modify
Часто бывает неизвестно, существует элемент в базе данных или нет. Информацию об этом можно получить с помощью команды select и только затем (в зависимости от кода возврата) применить команды insert и update. Команда modify является удобной комбинацией операторов insert и update, выполняемых за одну операцию. Допустим, необходимо изменить название города для записи клиента с идентификационным номером 12345678, но нет уверенности, что такая запись содержится в базе. Для подобной операции можно написать следующую программу:
При выполнении программы АВАР/4 проверяет наличие заданных ключевых полей в таблице базы данных (например, клиента с идентификационным номером 12345678). В зависимости от результата проверки поле может добавляться или изменяться. При выполнении операции значение системного кода возврата не устанавливается.
Так же как для insert и update, с помощью дополнения from table одной операцией можно модифицировать набор элементов таблицы:
В этом примере данные всех клиентов, не имеющих информации в поле названия города, считываются во внутреннюю таблицу all_customers. Затем добавляются данные нового клиента, и значение поля названия города заменяется на City unknown. После этого вся внутренняя таблица записывается в базу данных.
Вопросы предпочтения команды modify или комбинации команд insert/update относятся прежде всего к стилю программирования. Если наличие дублированных ключей маловероятно, то лучше использовать команду insert. В этом случае коллективная замена является оптимальным решением по вре-
158 |
Глава13 |
|
|
|
|
мени выполнения программы. С другой стороны, применение команды modify упрощает программу, так как выбор операции (insert или update) возлагается на систему.
Удаление элементов таблицы базы данных с помощью команды delete
Команда delete позволяет удалять из таблиц базы данных один или несколько элементов. Так же как для insert, update и modify, в команде delete можно использовать рабочую область по умолчанию, внутренние таблицы и предложение where:
Первый оператор delete удаляет данные клиента с идентификационным номером 12345678, которые содержатся в рабочей области customers. Второй оператор delete использует данные внутренней таблицы, и последний оператор delete удаляет данные всех клиентов, идентификационный номер которых начинается с 1.
Напомним, что знак процента (%) применяется в операторах Орел SQL для задания маски, состоящей из любой последовательности символов.
Если заданные элементы не найдены, то системный код возврата sy-subrc будет ненулевым. При коллективном удалении sy-subrc будет иметь значение 0 только в том случае, если до операции удаления каждой строке внутренней таблицы соответствовал элемент базы данных.
Динамическое задание имен таблиц
Все команды, описанные в предыдущих разделах, имеют свои динамические версии, которые обеспечивают задание имени таблицы базы данных во время выполнения. Например, можно заранее подготовить текст программы и в процессе ее выполнения ввести имя таблицы. Дня этого имя программы нужно указать в круглых скобках:
В этом кратком примере имя таблицы задается сразу перед оператором insert. На практике же имя таблицы часто задается из другой программы и передается через интерфейс.
Резюме
•Базовыми командами Open SQL являются insert, update, modify и delete.
•Операторы Open SQL поддерживают изменение как отдельной строки, так набора строк, содержащихся во внутренней таблице.
•Можно динамически задавать название таблицы базы данных (заключив его в круглые скобки).
Вследующей главе будут рассмотрены способы экспорта составных объектов данных (например, вложенных внутренних таблиц) во временную память или в постоянные таблицы.
Глава 14
Экспорт и импорт составныхобъектов данных
•Передача составных объектов данных в программы
•Использование области памяти АВАР/4 в качестве программного интерфейса
•Хранение составных объектов в базе данных
