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

Изменение таблиц базы данных

 

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". Обычно она используется, если необходимо добавить или изменить элемент независимо от наличия дублирован-

ного ключа.

Для таблицы базы данных, в отличие от внутренних таблиц, невозможно задать номер строки или индекс, куда следует вставить новый элемент. Причина в том, что СУБД реляционной базы данных сама "решает", в какое место вставить строку. С точки зрения программы вопросы типа "Существует ли данный элемент?" или "Каково значение этого элемента?" вполне корректны, а вопросы типа "В каком порядке отсортирована база данных?" или "Где физически располагается элемент?" не имеют смысла. Это является прямым следствием философии реляционных баз данных, согласно которой пользователь может знать только содержимое элемента базы, но не место расположения этого элемента.