【问题标题】:Select from where in ( ) table?从 ( ) 表中的哪个位置选择?
【发布时间】:2023-02-07 14:25:51
【问题描述】:

我想要在 ABAP 语法中使用动态 where 条件进行选择。

SQL 语句如下所示:

SELECT * FROM MCH1 WHERE MATNR IN (...) AND CHARG IN (...)

我的方法是将 2 个结构 ZMATN_STRZCHARG_STR 添加到字典中,并将相关组件作为行 (MATNRCHARG)。 然后创建 2 个具有关联线型的表类型。

现在我被困在 ABAP 中,因为我不知道如何编写 where 子句。 这就是我到目前为止所拥有的:

SELECT *
 FROM
  mch1
  FOR ALL ENTRIES IN @matnrs
 WHERE
    matnr = @matnrs-matnr
INTO TABLE @DATA(lt_result).

它适用于 matnr 或 charg 但不适用于两者。

附加信息

此选择发生在存在 2 个导入参数(2 种表类型)的功能模块中 - 所以我不能只写 where in ('xxx', 'yyy')

【问题讨论】:

    标签: abap opensql


    【解决方案1】:
    data lr_matnr type range of matnr.
    data lr_charg type range of MCH1-charg.
    "Fill lr_matnr and lr_charg...
    SELECT * FROM MCH1 WHERE MATNR IN @lr_matnr AND CHARG IN @lr_charg
      into @data(lt_result). 
    

    【讨论】:

    • 谢谢 - 它有效。我真的很想念 ABAP 中的数组——有时感觉你需要更多的代码才能获得与其他语言相同的结果:D
    【解决方案2】:

    当然,这是行不通的。这是错误:

    短文本 IN itab 运算符的值表的 SIGN 字段中的值无效。 操作员。

    发生了什么? ABAP 应用程序出错。

    当前的 ABAP 程序“Z______”必须终止,因为它 找一个 无法执行的语句。

    错误分析 当前 ABAP 程序已尝试执行打开的 SQL 语句 其 WHERE 条件包含 IN itab 运算符子句。

    IN itab 运算符仅用于具有 以下结构:

    SIGN(1) OPTION(2) LOW LIKE db_field 高 LIKE db_field

    在 SIGN 列中,仅使用值“I”或“E”之一。值 6 是

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多