Проверьте, существует ли столбец X в таблице Y.

У меня есть две строковые переменные:

  • lv_table_name содержит имя таблицы
  • lv_column_name содержит имя столбца

Есть ли способ проверить, есть ли таблица (или представление) с данным столбцом?


person guettli    schedule 05.10.2018    source источник


Ответы (2)


Определения таблиц и представлений можно найти в таблице DD03L. Если вы можете получить доступ к таблице с указанной комбинацией таблицы/столбца, это будет заметно быстрее.

REPORT.

DATA: lv_column_name TYPE string VALUE 'MY_FIELD'.

"this will tell you which tables/views exist containing the column 'MY_FIELD'
SELECT tabname
  FROM dd03l INTO TABLE @DATA(lt_tables)
  WHERE fieldname EQ @lv_column_name.
person andrecito    schedule 05.10.2018
comment
Я думаю, что вопрос касается TABLE + COLUMN, а не только COLUMN, надеюсь. В противном случае вы получите довольно долгое время отклика. Обратите внимание, что DD03L также содержит структуры словаря ABAP, поэтому вы можете фильтровать на основе DD02L-TABCLASS IN («TRANSP», «CLUSTER», «POOL», «VIEW»). - person Sandra Rossi; 05.10.2018
comment
Обратите внимание, что проверка DD03L (только) будет эквивалентна cl_abap_classdescr=>describe_by_name( EXPORTING p_name = |\TYPE={ lv_table_name }-{ lv_column_name }| EXCEPTIONS type_not_found = 1 ). (sy-subrc = 1 означает, что таблица или столбец не существуют) - person Sandra Rossi; 05.10.2018
comment
@SandraRossi, которую вы написали. Обратите внимание, что проверка DD03L (только) будет эквивалентна .. вы думаете, что проверки только DD03L недостаточно? - person guettli; 15.10.2018
comment
@SandraRossi извините, я был слеп. Да DD02L выглядит лучше. Спасибо. - person guettli; 15.10.2018

Для Netweaver 7.5 вы можете использовать простой выбор OPEN SQL на DD03L https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abensql_expr_literal_abexa.htm

SELECT SINGLE @abap_true
       FROM DD03L
       WHERE tabname EQ @lv_table_name AND fieldname EQ @lv_column_name
       INTO @DATA(lv_exists).
person Haojie    schedule 08.10.2018