1

我正在尝试在abap 中编写一些本机SQL,但遇到了一些问题。

这是我的代码:

method GET_SOMEDATA.

  DATA:   lt_table    TYPE TABLE OF /BI0/TCUSTOMER,
          c1          TYPE /BI0/TCUSTOMER.

  DATA: BEGIN OF wa,
          customer    TYPE /BI0/OICUSTOMER,
          txtsh       TYPE RSTXTSH,
          txtmd       TYPE RSTXTMD,
          txtlg       TYPE RSTXTLG,
        END OF wa.

    EXEC SQL.
      OPEN c1 FOR
        SELECT * FROM /BI0/TCUSTOMER
         WHERE customer LIKE '229'.
    ENDEXEC.
    DO.
      EXEC SQL.
          FETCH NEXT c1 INTO :wa-customer, :wa-txtmd
*         ERROR: CX_SY_NATIVE_SQL_ERROR
      ENDEXEC.
      IF sy-subrc = 0.
*        <process data>
      ENDIF.
    ENDDO.
    EXEC SQL.
      CLOSE c1
    ENDEXEC.

endmethod.

在调用“FETCH NEXT c1 INTO :wa-customer, :wa-txtmd”后,我得到了一个“CX_SY_NATIVE_SQL_ERROR”——我猜我的光标有些问题——但我不知道。一些帮助会很棒。

4

1 回答 1

3

规则 1:不要使用原生 SQL。

规则 2:不要使用原生 SQL。

规则 3:不要使用原生 SQL。

...

规则 n:不要使用本机 SQL。

规则 n+1:说真的,不要。

规则 n+2:如果你真的需要,记住你必须手动指定客户端。

规则 n+3:不要在 Native SQL 中使用 SELECT *,始终按名称专门选择字段。原因:您无法 FETCH ... INTO CORRESPONDING FIELDS,但必须注意目标字段的顺序、编号和数据类型是否匹配。如果您的表 /BI0/TCUSTOMER 不仅包含类型为 /BI0/OICUSTOMER 和 RSTXTMD 的两个字段,那么这很可能是导致异常的原因。

于 2010-06-14T18:36:15.230 回答