我试图同时更新具有多个行的数据库表。我只需要从内部表更新名为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] 删除。
我来说两句