Как выбрать LRAW из таблицы БД? - PullRequest
3 голосов
/ 16 марта 2020

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

 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, потому что я получаю следующую ошибку:

enter image description here

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

Возможно ли это даже?

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

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

1 Ответ

3 голосов
/ 17 марта 2020

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


first one - это ошибка активации таблицы QMEL:

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

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


Вопрос second касается того, как прочитай такое поле. Оба столбца всегда должны читаться в одно и то же время, а столбец 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.

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

Примечание: если вы хотите прочитать тексты из таблицы STXL, есть другое решение, вызвав функциональный модуль READ_TEXT_TABLE или * 1045. * Если вы предпочитаете. Они были сделаны доступными в примечании 2261311. Если у вас нет или вы не можете установить эти функциональные модули, вы можете попробовать this gist , который делает то же самое. Он также содержит ссылку на другое обсуждение.

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

...