2010-06-14 41 views
1

我想在abap中編寫一些原生SQL,但遇到了一些問題。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-客戶:WA-txtmd」 我得到一個 「CX_SY_NATIVE_SQL_ERROR」 - 我guesse與我的光標東西不行 - 但我不知道。一些幫助會很好。

+1

你爲什麼要在原生sql中做到這一點? – 2010-06-14 16:34:04

回答

3

規則1:不要使用Native SQL。

規則2:不要使用Native SQL。

規則3:不要使用Native SQL。規則n:不要使用原生SQL。不要使用原生SQL。不要使用原生SQL。不要使用原生SQL。不要使用原生SQL。規則n + 1:說真的,不要這樣做。規則n + 2:如果您確實需要,請記住您必須手動指定客戶端。規則n + 3:不要在Native SQL中使用SELECT *,總是按名稱專門選擇字段。原因:您無法將...輸入到相應的字段中,但必須注意目標字段的序列,數量和數據類型相匹配。如果您的表/ BI0/TCUSTOMER不僅包含鍵入爲/ BI0/OICUSTOMER和RSTXTMD的兩個字段,那很可能是導致異常的原因。