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: ネイティブ SQL で SELECT * を使用しないでください。常にフィールドを明確に名前で選択してください。理由: FETCH ... INTO CORRESPONDING FIELDS はできませんが、ターゲット フィールドのシーケンス、数、およびデータ型が一致するように注意する必要があります。テーブル /BI0/TCUSTOMER が /BI0/OICUSTOMER および RSTXTMD として型指定された 2 つのフィールドだけで構成されていない場合、それがおそらく例外の原因です。

于 2010-06-14T18:36:15.230 に答える