Как выбрать LRAW из таблицы БД?

У меня есть следующий код:

 SELECT S~CLUSTD AS ZZCLUSTD
   INTO CORRESPONDING FIELDS OF TABLE @lt_viqmel_iflos
   FROM viqmel AS v
     LEFT OUTER JOIN stxl AS S
      ON s~tdobject = @lv_qmel
      AND s~tdname = v~qmnum

Оператор select генерирует следующий короткий дамп:

Only the prefixed length field can be used to read from the LRAW field or
LCHR field S~CLUSTD.

Внутренняя таблица lt_viqmel_iflos имеет тип viqmel_iflos (представление БД, содержащее таблицу БД QMEL), к которой я добавил тип ZZCLUSTD char200.

Проблема в том, что я не могу сделать ZZCLUSTD типа LRAW в QMEL, потому что получаю следующую ошибку:

введите здесь описание изображения

Так что мой единственный вариант (о котором я знаю) остается выбрать в char200 первые 200 символов LRAW.

Это вообще возможно?

Или есть другой способ выбрать данные LRAW?

Я нашел информацию по теме, но, к сожалению, не могу адаптировать ее к своему сценарию:считывать данные LRAW


person Ovidiu Pocnet    schedule 16.03.2020    source источник


Ответы (1)


На самом деле тут два вопроса.


Первая ошибка активации таблицы QMEL:

Поле ZZCLUSTD не имеет предшествующего поля длины типа INT4.

Таблица DDIC, содержащая столбец типа LCHR и LRAW, требует, чтобы ей всегда непосредственно предшествовал столбец типа INT2 или INT4 (хотя в сообщении указано только INT4).


Второй вопрос о том, как читать такое поле. Оба столбца всегда должны считываться одновременно, а столбец INT2/INT4 должен быть "прочитан до" столбца LCHR/LRAW. Единственная ссылка, которую я смог найти, чтобы объяснить это ограничение, находится в примечании 302788 - LCHR/ Поля LRAW в таблицах логических кластеров.

Столбец INT2 таблицы STXL с именем CLUSTR работает следующим кодом:

TYPES: BEGIN OF ty_viqmel_iflos,
         clustr   TYPE stxl-clustr, "INT2
         zzclustd TYPE stxl-clustd, "LCHR
       END OF ty_viqmel_iflos.
DATA lt_viqmel_iflos TYPE TABLE OF ty_viqmel_iflos.

SELECT S~CLUSTR, S~CLUSTD AS ZZCLUSTD
   INTO CORRESPONDING FIELDS OF TABLE @lt_viqmel_iflos
   FROM viqmel AS v
     INNER JOIN stxl AS S
      ON s~tdname = v~qmnum
   UP TO 100 ROWS.

NB: в вашем вопросе есть путаница, когда вы ссылаетесь как на CLUSTD из STXL, так и на ZZCLUSTD из QMEL. Я не понимаю, чего именно вы пытаетесь достичь.

NB: если вы хотите прочитать тексты из таблицы STXL, есть другое решение, вызывающее функциональный модуль READ_TEXT_TABLE или READ_MULTIPLE_TEXTS, если хотите. Они были доступны в примечании 2261311. Если у вас нет или вы не можете установить эти функциональные модули, вы можете попробовать это суть, которая делает то же самое. Он также содержит ссылку на другое обсуждение.

NB: для информации, если быть более точным, LRAW содержит байты, а не символы, и для кластеров данных (в случае STXL) эти байты соответствуют любым значениям (символы в случае STXL), заархивированным оператором EXPORT и должны быть распакованы с помощью IMPORT`.

person Sandra Rossi    schedule 16.03.2020
comment
ZZCLUSTD не имеет большого отношения к проблеме. Это просто соглашение об именах, которое я должен использовать, чтобы добавить CLUSTD к таблице БД QMEL. Мне удалось выбрать данные, используя также CLUSTR, как вы предложили. Я извлек данные из CLUSTD, используя функциональный модуль READ_TEXT. Спасибо за всю предоставленную информацию! - person Ovidiu Pocnet; 17.03.2020
comment
Мой комментарий был больше о том, что я не понимаю связи между вашими двумя вопросами: вы создаете ZZCLUSTD/QMEL (сообщение об ошибке в словаре ABAP), но вы читаете CLUSTD/STXL (синтаксическая ошибка в ABAP). Это два разных вопроса по очень близкой теме. - person Sandra Rossi; 17.03.2020
comment
Я думал, что причина, по которой я получил синтаксическую ошибку, возможно, заключалась в том, что эта ошибка была в ZZCLUSTD/QMEL. - person Ovidiu Pocnet; 18.03.2020