2010-06-14 3 views
1

abap에 일부 원시 SQL을 작성하려고하지만 몇 가지 문제가 있습니다. - 내가 커서 뭔가를 guesse 내가 "CX_SY_NATIVE_SQL_ERROR"를 얻고있다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. 

를 호출 한 후 ": WA-고객, WA-txtmd INTO NEXT (C1)을 FETCH :"여기

내 코드입니다 나도 몰라. 도움이된다면 도움이 될 것입니다.

+1

네이티브 SQL에서이 작업을 수행하는 이유는 무엇입니까? –

답변

3

규칙 1 : 기본 SQL을 사용하지 마십시오.

규칙 2 : 기본 SQL을 사용하지 마십시오.

규칙 3 : 기본 SQL을 사용하지 마십시오.

...

규칙 n : 기본 SQL을 사용하지 마십시오.

규칙 n + 1 : 진지하게,하지 마십시오.

규칙 n + 2 : 정말로해야한다면 클라이언트를 수동으로 지정해야한다는 것을 기억하십시오.

규칙 n + 3 : Native SQL에서 SELECT *를 사용하지 말고 항상 이름으로 필드를 선택하십시오. 이유 : 일치하는 필드로 FETCH 할 수는 없지만 대상 필드의 순서, 숫자 및 데이터 유형이 일치해야합니다. 테이블/BI0/TCUSTOMER가/BI0/OICUSTOMER 및 RSTXTMD로 입력 된 두 필드로 구성되어있을뿐만 아니라 예외가 발생했을 가능성이 가장 큽니다.