Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4.pdf
Скачиваний:
532
Добавлен:
17.02.2016
Размер:
29.74 Mб
Скачать

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 в качестве программного интерфейса

Хранение составных объектов в базе данных