Abap 如何从DB表中选择LRAW?
我有以下代码:Abap 如何从DB表中选择LRAW?,abap,sap-data-dictionary,Abap,Sap Data Dictionary,我有以下代码: 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 fiel
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
(包含DB tableQMEL
)的DB视图,我在其中添加了ZZCLUSTD
类型char200
问题是我无法在QMEL中生成ZZCLUSTD类型LRAW,因为我得到以下错误:
因此,我唯一的选择(我知道)仍然是在char200中选择LRAW的前200个字符
这可能吗
或者是否有其他方法选择LRAW数据
我找到了关于这个主题的信息,但不幸的是,我无法使其适应我的场景:事实上,这里有两个问题
第一个是表
QMEL
的激活错误:
字段ZZCLUSTD
前面没有INT4类型的长度字段
包含LCHR和LRAW类型的列的DDIC表,要求它前面总是紧跟着一个类型的列(尽管消息中只显示INT4)
第二个问题是关于如何读取这样的字段必须始终同时读取两列,并且必须在LCHR/LRAW列之前“读取”INT2/INT4列。我能找到的解释这一限制的唯一参考资料是在注释中
STXL
表的INT2列命名为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.
注意:您的问题有点混乱,您同时引用了
STXL
中的CLUSTD
和ZZCLUSTD
中的QMEL
。我不明白你到底想达到什么目的
注意:如果您想从表STXL
中读取文本,有另一种解决方案,可以调用功能模块read\u TEXT\u table
,或者read\u MULTIPLE\u TEXT
,如果您愿意的话。附注2261311提供了这些资料。如果您没有或无法安装这些功能模块,您可以尝试执行相同的操作。它还包含对另一个讨论的引用
注意:更准确地说,LRAW包含字节,而不是字符,对于数据集群(在
STXL
的情况下),这些字节对应于与语句压缩并用`解压的任何值(在STXL
的情况下为字符)。ZZCLUSTD与问题关系不大。这只是我必须使用的命名约定,以便将CLUSTD附加到DB表QMEL中。正如您所建议的,我还使用CLUSTR选择了数据。我使用函数模块READ_TEXT从CLUSTD中提取数据。感谢您提供的所有信息!我的评论更多的是关于我不理解你的两个问题之间的关系:你创建了ZZCLUSTD/QMEL(ABAP字典中的错误消息),但是你读了CLUSTD/STXL(ABAP中的语法错误)。这是关于一个非常接近的主题的两个截然不同的问题。我认为我出现语法错误的原因可能是因为ZZCLUSTD/QMEL有这个错误。