从用VALUE内联构造的内部表中更新数据库表

伊万·迪亚兹·萨拉斯

我试图同时更新具有多个行的数据库表。我只需要从内部表更新名为ESTADO的字段。

我不想在循环语句中执行此操作。这是因为代码检查器工具和性能。

我试图找到有关新的abap语法的信息,并找到了一个内联语句来避免循环。

UPDATE ZBWEVATDOC61 FROM TABLE @( VALUE #(
        FOR ls_doc61 IN it_doc61 WHERE ( cuv = ls_doc61-cuv And  folio =  l 
                   s_doc61-folio and folio_interno = ls_doc61-folio_interno )
          ( VALUE #(
              BASE ls_doc61
              estado = ls_doc61-estado  )  )  ) ) .
    IF sy-subrc eq 0.
      commit work AND WAIT.
    ENDIF.

我试图使用WHERE语句指定要更新的行,但是不起作用

追日者

以下语法有效:

TYPES: ttcurr TYPE TABLE OF tcurr WITH EMPTY KEY.

SELECT ukurs, tcurr, gdatu
  FROM tcurr
  INTO TABLE @DATA(ltcurr)
  UP TO 100 ROWS.

DATA(it_modified) = VALUE ttcurr( FOR ls_tcurr IN ltcurr ( ukurs = ls_tcurr-ukurs / 1000 tcurr = ls_tcurr-tcurr gdatu = ls_tcurr-gdatu ) ).

UPDATE tcurr FROM TABLE @(
    VALUE ttcurr(
        FOR ls_curr IN it_modified WHERE ( tcurr NE 'EUR' AND gdatu > '79989898' )
          ( ukurs = ls_curr-ukurs ) ) ).

BASE在您的代码段中错误地使用了它,当您用表表达式填充某些itab并希望保留其先前的内容时,就会使用它,它仅接受itab操作数。在我们的情况下,更新dbtab时可以将其省略。

您不能在此语句中使用内联类型,也不能在中使用自动生成的varls_doc61进行比较WHERE

尝试将您的代码段更改为类似的内容:

TYPES: ttdoc TYPE TABLE OF ZBWEVATDOC61 WITH EMPTY KEY.
UPDATE ZBWEVATDOC61 FROM TABLE @(
VALUE ttdoc(
    FOR ls_doc61 IN it_doc61 WHERE ( cuv = 'smth' AND  folio = 'smth' AND folio_interno = 'smth' )
      ( estado = ls_doc61-estado ) ) ).

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章