ВЫБРАТЬ по столбцу типа STRING - PullRequest
4 голосов
/ 24 января 2020

Я постараюсь объяснить как можно проще.

У меня есть таблица базы данных 'DB_JOURNAL', которая имеет только 2 столбца типа 'Дата' и 'Журнал' Строка .

пример:

01.01.2020 | I played football.

02.02.2020 | I played basketball

Я хочу написать оператор Select и в запросе найти строку . Как поиск слова «футбол».

Select * from DB_JOURNAL into table lt_journal
       where journal like '%football%'.

Это не разрешено в ABAP:

Поле «JOURNAL» является длинной строкой или текстом и не может использоваться в ГДЕ состояние.

Есть ли решение?

Ответы [ 3 ]

4 голосов
/ 24 января 2020

Единственное решение - использовать native SQL, то есть SQL вашей базы данных.

Native SQL может работать в нескольких вариантах.

Самый короткий, но и самый старый код (SAP рекомендует его не использовать) с оператором EXEC SQL:

DATA text TYPE string.
EXEC SQL PERFORMING sr.
  SELECT text FROM sotr_textu INTO :text WHERE text LIKE '%e%'
ENDEXEC.
FORM sr.
  WRITE / text.
ENDFORM.

Примечание: приведенный выше код отлично работает с HANA , Базы данных MS SQL и Oracle, но необходимо указать имена таблиц и столбцов в верхнем регистре с помощью MaxDB.

Пример более сложного запроса:

DATA: text   TYPE string,
      status TYPE string.

status = 'R'.

TRY.
    EXEC SQL PERFORMING sr.
      SELECT TEXT FROM SOTR_TEXTU INTO :text
           WHERE  STATUS  = :status
             AND  TEXT    LIKE '%e%'

    ENDEXEC.
  CATCH  cx_sy_native_sql_error INTO DATA(exc).
    cl_demo_output=>display( exc->get_text( ) ).
ENDTRY.
FORM sr.
  WRITE / text.
ENDFORM.

для поиска без учета регистра:

 AND  UPPER(TEXT) LIKE UPPER(:text)

Другие способы: ADB C и AMDP .

ADB C заменено EXEC SQL.

1 голос
/ 25 января 2020

Единственный способ избежать Native SQL, предложенный Сандрой, - это использовать циклический SELECT:

DATA: lt_journal TYPE TABLE OF db_journal WITH EMPTY KEY.

SELECT *
 FROM DB_JOURNAL
 INTO @DATA(wa).
 CHECK wa-journal CP '*football*'.
 APPEND wa TO lt_journal.
ENDSELECT.
0 голосов
/ 24 января 2020

Вы уверены, что столбец "Журнал" имеет тип String? Можете ли вы изменить его на какой-то существующий элемент данных CHAR40 или что-то еще ...

Также рассмотрите возможность использования

Select * from DB_JOURNAL into CORRESPONDING FIELDS OF table lt_journal where journal like '%football'.

...