Извлечение одного поля из таблицы БД в itab

#abap #opensql

#abap #opensql

Вопрос:

Я хочу извлечь поле a, скажем, excep_point из прозрачной таблицы z_accounts для комбинации company_code и account_number . Как я могу это сделать в ABAP SQL?

Предположим, что структура таблицы

 |company_code | account_number | excep_point |
  

Ответ №1:

Предполагая, что у вас есть полный первичный ключ…

 data: gv_excep_point type zaccounts-excep_point.

select single excep_point
into gv_excep_point
from zaccounts 
where company_code = some_company_code
 and account_number = some_account_number.
  

если у вас нет полного PK и для excep_point может быть несколько значений

 data: gt_excep_points type table of zaccounts-excep_point.

select excep_point
into table gt_excep_points
from zaccounts 
where company_code = some_company_code
 and account_number = some_account_number.
  

Существует по крайней мере еще один вариант, но эти 2 я использую чаще всего.

Ответ №2:

Только для информации. Когда вы выбираете данные в таблицу, вы можете писать сложные выражения для объединения разных полей. Например, у вас есть внутренняя таблица (itab) с двумя полями «A» и «B». И вы собираетесь выбрать данные из таблицы базы данных (dbtab), в которой есть 6 столбцов — «z», «x», «y», «u», «v», «w». И, например, каждое поле имеет тип char2, вы стремитесь поместить «z», «x», «y», «u» в поле «A» внутренней таблицы и «v», «w» в поле «B». Вы можете написать простой код:

 select z as A 0(2)   
       x as A 2(2)   
       y as A 4(2)  
       u as A 6(2)   
       v as B 0(2)  
       w as B 2(2)  FROM dbtab  
       INTO CORRESPONDING FIELDS OF TABLE itab
          WHERE <where condition>.
  

Этот простой код упрощает выполнение вашей работы

Комментарии:

1. выберите z как A 0 (2) x как A 2 (2) … очень приятно, никогда не видел такого сложного метода выбора. Большое вам спасибо.

Ответ №3:

В дополнение к ответу Брайана, здесь приведена официальная онлайн-документация по Open SQL.