BC400_RU_ECC_2005
.pdfBC400 |
Урок: Считывание таблиц базы данных |
Рисунок 91: Поля целевой структуры, имена которых совпадают с именами в списке полей
При необходимости использования структурной переменной для получения считанной записи, имеющей поля, имена которых совпадают с именами полей в целевом списке, и другую структуру (дополнительные поля, другой порядок полей), целесообразно использовать дополнение CORRESPONDING FIELDS OF. В результате в целевой области будут заполнены только поля с одинаковыми именами. Следует удостовериться, что соответствующие типы полей также являются идентичными, поскольку в противном случае (как в операторе MOVE) осуществляется (сложное) преобразование, в результате которого в целевые поля могут быть перенесены неполные данные (по причине отсечения).
Преимущества этого варианта заключаются в следующем:
•Целевая структура не обязательно должна быть выровнена по левому краю, также как и список полей.
•Эта структура отличается простотой ведения, так как расширение списка полей или целевой структуры не требует внесения в программу дополнительных изменений, поскольку в структуре уже существует поле с тем же самым именем (и, возможно, тем же самым типом).
|
© 2006 г. SAP AG All rights reserved. Авторские |
151 |
06-04-2006 |
права защищены. |
Глава 5: Сбор данных |
BC400 |
Рисунок 92: Считывание нескольких строк с использованием цикла
Показанный выше цикл SELECT может использоваться для последовательного считывания в программе нескольких строк из таблицы базы данных.
С помощью выражения WHERE определяются строки, которые будут считываться в целевую структуру и обрабатываться с использованием блока операторов, указанных в теле цикла. Несколько логических условий в рамках выражения WHERE могут быть логически соединены с помощью AND и OR.
Данные передаются из базы данных в интерфейс базы данных сервера приложений в виде пакетов. После этого записи построчно копируются указанным блоком обработки в целевую область для обработки.
Цикл завершается автоматически после считывания и анализа всех требуемых строк.
Значение возврата должно быть запрошено после выполнения цикла SELECT(т.е. после оператора ENDSELECT). Если была считана хотя бы одна строка, значение переменной SY-SUBRC равно 0. В этом случае переменная SY-DBCNT содержит количество считанных записей.
152 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Считывание таблиц базы данных |
Рисунок 93: Считывание нескольких строк с выборкой массива
Для непосредственного, а не построчного копирования выбранной части базы данных во внутреннюю таблицу может использоваться дополнение INTO TABLE. Этот метод называется выборкой массива. Он отличается высокой производительностью и используется для заполнения внутренней таблицы записями из таблицы базы данных посредством переноса данных по блоками, а не по строкам.
Так как выборка массива не является видом обработки циклов, операторENDSELECT не требуется и даже не является допустимым.
Аналогично описанным выше вариантам SELECT, внутренняя таблица, указанная в качестве целевой для выборки массива, должна быть выровнена по левому краю и структурирована так же, как и список полей. Если внутренняя таблица не отвечает этому условию, вместо INTO TABLE необходимо использовать дополнение INTO CORRESPONDING FIELDS OF TABLE . В этом случае столбцы базы данных, указанные в списке полей, копируются в столбцы внутренней таблицы, имеющие те же самые имена. Кроме того, следует также удостовериться, что типы полей связанных столбцов соответствуют друг другу, во избежание сложного преобразования и возможного появления неполных данных в целевой таблице.
При выборке массива информация, которая могла содержаться во внутренней таблице, перезаписывается. При необходимости добавления, а не перезаписи строк, можно использовать дополнение APPENDING TABLE .
|
© 2006 г. SAP AG All rights reserved. Авторские |
153 |
06-04-2006 |
права защищены. |
Глава 5: Сбор данных |
BC400 |
Если во внутреннюю таблицу была скопирована по крайней мере одна запись, значение переменной SY-SUBRC равно нулю. В данном случае переменная SY-DBCNT содержит количество считанных строк.
Рисунок 94: Считывание данных из таблиц, зависящих от манданта
Таблица базы данных называется зависящих от манданта, если поле манданта (тип данных CLNT) является первым ключевым столбцом, и таблица содержит записи, которые являются специфичными для манданта.
При выборе данных из зависящих от манданта таблиц без указания манданта выполняется считывание только тех записей данных, которые относятся к текущему манданту. Текущий мандант переносится в систему базы данных, в которой производится сбор данных.
При необходимости считывания данных из явно указанного манданта этот мандант должен быть определен в выражении WHERE. Следует
отметить, что это возможно только при использовании дополнения CLIENT SPECIFIED после выражения FROM.
Поскольку считывание данных для всех мандантов на практике требуется редко и не соответствует контексту данного курса, поле манданта в презентациях обычно опускается.
154 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Считывание таблиц базы данных |
Рисунок 95: Аспект производительности: вторичный индекс
Если доступ к таблице базы данных часто осуществляется с использованием определенных критериев выбора, для ускорения этого процесса можно определить вторичный индекс для полей выбора. Данная операция выполняется в режиме просмотра соответствующей прозрачной таблицы в ABAP-словаре с использованием кнопки Индексы. При активации индекса в базе данных создается вторичный индекс.
При выборе из зависящих от манданта таблиц мандант всегда переносится в базу данных (т.е. данная операция всегда является частью процесса выбора). Следовательно, при определении индекса для подобных таблиц имеет смысл включать поле манданта. В ходе выполнения оно может использоваться для ограничения поиска в рамках базы данных соответствующим блоком манданта посредством вторичного индекса.
После создания и активации индекса этот индекс автоматически используется оптимизатором базы данных при выполнении программы в случае, если использование индекса ускорит процесс выбора. Указывать индекс вручную в операторе SELECT не требуется.
|
© 2006 г. SAP AG All rights reserved. Авторские |
155 |
06-04-2006 |
права защищены. |
Глава 5: Сбор данных |
BC400 |
Первичный индекс состоит из всех ключевых полей таблицы базы данных и создается автоматически. Он используется для ускорения доступа при выборе по всем ключевым полям или, по крайней мере, части ключевых полей, выровненной по левому краю.
Рекомендация: Необходимо отметить, что использование индексов, в которых нет необходимости, оказывает негативное воздействие на производительность системы.
Считывание нескольких таблиц баз данных, доступ с инициированием изменений (Outlook)
Часто возникает необходимость считывания и просмотра данных из различных таблиц.
Прежде всего, следует найти повторно используемые компоненты,
применяемые для операции считывания. На следующем рисунке представлен обзор подобных подпрограмм, поставляемых SAP, которые можно включить в программу считывания.
Рисунок 96: Повторное использование компонентов для сбора данных
156 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Считывание таблиц базы данных |
Существуют четыре типа повторно используемых компонентов, предназначенных для выбора данных:
•Логические базы данных
(= программы сбора данных, выполняющие считывание данных из таблиц, иерархически связанных друг с другом)
•Функциональные модули
(= подпрограммы, хранящиеся в построителе функций SAP-системы, с инкапсулированными функциональными возможностями, такими как считывание данных из иерархически связанных таблиц)
•BAPI
(= методы бизнес-объектов, например, с функцией чтения)
•Методы глобальных классов
Более подробная информация о поиске и использовании логических баз данных представлена в онлайн-документации по “ABAP-программированию и среде выполнения” в разделе, посвященном “доступу к базе данных
ABAP”, а также в курсе BC405.
Информация о трех других методах приведена в соответствующих разделах.
При отсутствии повторно используемых компонентов для выбора данных следует организовать доступ для чтения самостоятельно. В целом наиболее быстрым методом является внедрение с использованием объединения таблиц.
В качестве примера рассмотрим считывание и вывод записей SPFLI. Для каждой записи также будет выведено полное название соответствующей авиакомпании, хранящееся в таблице SCARR. На следующем рисунке представлен логический процесс объединения таблиц, при котором все требуемые данные могут быть выбраны с использованием оператора
SELECT.
|
© 2006 г. SAP AG All rights reserved. Авторские |
157 |
06-04-2006 |
права защищены. |
Глава 5: Сбор данных |
BC400 |
Рисунок 97: Пример объединения таблиц
Рисунок 98: Записи для определения объединения таблиц
158 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Считывание таблиц базы данных |
При объединении таблиц необходимо ответить на три вопроса:
•Объединяемые таблицы
Ккаким таблицам базы данных должен быть получен доступ?
•Условие соединения
Какому условию должны соответствовать записи, выбираемые из объединяемых таблиц и преобразуемые в объединенную запись?
•Объединяемые столбцы
Какие столбцы из объединяемых таблиц должны быть доступны в объединенной таблице?
Рисунок 99: Варианты внедрения объединения таблиц
|
© 2006 г. SAP AG All rights reserved. Авторские |
159 |
06-04-2006 |
права защищены. |
Глава 5: Сбор данных |
BC400 |
Существуют два варианта выполнения объединения таблиц:
•В ABAP-словаре создается ракурс базы данных, соответствующий объединению таблиц, после чего он выбирается в программе.
Более подробная информация содержится в онлайн-документации по
ABAP-инструментальным средствам в разделе ABAP-словарь.
•В программе производится выбор данных из определенного объединения (ABAP-объединение). В ходе выполнения в интерфейсе базы данных системой динамически создается соответствующий запрос базы данных.
Для получения дополнительной информации см. документацию по ключевым словам выражения FROM оператора SELECT.
Рекомендация: Объединение таблиц представляет собой ракурс соответствующих таблиц базы данных и не содержит какие-либо избыточные данные. При выборе данных из объединения таблиц требуемые данные считываются из соответствующих таблиц базы данных.
В объединение таблиц можно включать и более двух таблиц.
Рисунок 100: Доступ к базе данных для изменения
160 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |