IF P_KUNNR IS INITIAL.
GV_ZSDT15_KUNNR = 'KUNNR = KUNNR'. "입력값이 없을때. 전체를 검색.
ELSE.
GV_ZSDT15_KUNNR = 'KUNNR = P_KUNNR'. "p_kynnr 파라미터로 입력받은값
ENDIF.
* DB TABLE DATA를 읽어 온다.
SELECT * INTO TABLE IT_tab
FROM ZSDT15
WHERE (GV_ZSDT15_KUNNR).
아래와 같은 덤프가 자꾸 떨어지네요.. 뭐가 잘 못된것인지
잘 모르겠습니다.
Runtime Errors SAPSQL_WHERE_ILLEGAL_VALUE
Except. CX_SY_DYNAMIC_OSQL_SEMANTICS
Date and Time 2007.09.17 09:30:15
Short text
A condition specified at runtime has an unexpected format.
어떤 문제가 발생했습니까?
Error in the ABAP Application Program
The current ABAP program "ZSD322" had to be terminated because it h
come across a statement that unfortunately cannot be executed.
오류분석
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_DYNAMIC_OSQL_SEMAN
not caught in
procedure "CHECK_KUNNR" "(FORM)", nor was it propagated by a RAISIN
Since the caller of the procedure could not have anticipated that t
exception would occur, the current program is terminated.
The reason for the exception is:
The current ABAP program has tried to execute an Open SQL statement
which contains a WHERE, ON or HAVING condition with a dynamic part.
The part of the WHERE, ON or HAVING condition specified at runtime
a field or an internal table, contains the invalid value "KUNNR".
댓글 11
-
SSong
2007.09.17 19:29
-
Hardaway
2007.09.17 21:19
GV_ZSDT15_KUNNR = 'KUNNR = KUNNR'. "입력값이 없을때. 전체를 검색.
위 부분에서 조건문인 'KUNNR', 이 변수에는 어떤값이 들어가 있는지요?
입력값이 없을 경우 전체 검색을 하려는 목적이시라면 저 부분은 제외하시고 동작시켜 보세요.
-
백혜정
2007.09.17 23:59
'"입력값이 없을때. 전체를 검색.' 이라는 comment를 보건데
아래처럼 코딩을 하시는 편이 원하는 결과를 얻을 수 있을 듯합니다.
IF P_KUNNR IS INITIAL.
SELECT * INTO TABLE IT_tab
FROM ZSDT15.
ELSE.
SELECT * INTO TABLE IT_tab
FROM ZSDT15
WHERE KUNNR = P_KUNNR.
ENDIF. -
디카촐
2007.09.18 05:32
너무 어렵게 생각하지 마셔요..ㅋ
-
노름마치
2007.09.18 11:54
* 반드시 위 구문으로 사용해야 한다면, 이렇게 해보세요.
REPORT yle_test999.
*"----------------------------------------------------------------------
TYPE-POOLS: slis, kkblo.
DATA: lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: ls_layout TYPE slis_layout_alv.
DATA: ls_fieldcat TYPE slis_fieldcat_alv.
DATA: l_title TYPE sy-title.
DATA: ls_selfield TYPE slis_selfield.
*"----------------------------------------------------------------------
TABLES : makt.
DATA : BEGIN OF itab OCCURS 0,
matnr TYPE matnr,
maktx TYPE maktx,
END OF itab.
DATA : g_where_cause(30).
RANGES r_matnr FOR makt-matnr.
PARAMETER p_matnr TYPE matnr.
START-OF-SELECTION.
IF NOT p_matnr IS INITIAL.
r_matnr-sign = 'I'.
r_matnr-option = 'EQ'.
r_matnr-low = p_matnr.
APPEND r_matnr.
ENDIF.
g_where_cause = 'MATNR IN R_MATNR'.
SELECT * FROM makt
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE (g_where_cause)
AND spras = sy-langu.
CHECK NOT itab[] IS INITIAL.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-seltext_l = '자재코드'.
ls_fieldcat-outputlen = 18.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MAKTX'.
ls_fieldcat-seltext_l = '자재명'.
ls_fieldcat-outputlen = 40.
APPEND ls_fieldcat TO lt_fieldcat.
l_title = 'TEST'.
ls_layout-window_titlebar = 'TEST'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
is_layout = ls_layout
i_callback_program = sy-repid
it_fieldcat = lt_fieldcat[]
TABLES
t_outtab = itab. -
김현종
2007.09.18 20:22
IF P_KUNNR IS INITIAL.
GV_ZSDT15_KUNNR = 'KUNNR = KUNNR'. "입력값이 없을때. 전체를 검색.
ELSE.
GV_ZSDT15_KUNNR = 'KUNNR = P_KUNNR'. "p_kynnr 파라미터로 입력받은값
ENDIF.
GV_ZSDT15_KUNNR 넣는값이 잘못된것같은데요.
GV_ZSDT15_KUNNR = 'KUNNR = P_KUNNR'. 이부분을 다시 써야한다면.
concatenate 'kunnr = ' p_kunnr into GV_ZSDT15_KUNNR. 이렇게 넣어줘야 올바른 구문이 됩니다.^^
-
달이랑
2007.09.19 00:24
아네 감사합니다. 제가 무지 해서 이걸 첨 써보는거라..
-
홍길동
2007.09.19 01:46
'kunner=kunnr' <<-- 요구문 보고 한참생각했네요; -
지의
2007.09.21 00:34
다들 어렵게 생각하시는거 같아서 몇 자 적습니다.
그냥 p_kunnr 필드를 range 로 해서 s_kunnr 로 만드신 다음에
p_kunnr 에 넣을 값이 있으면 넣어주고 없으면 안 넣어주고 하시고
그냥 쿼리 하나에 select kna1 into kna1 from kna1 where kunnr in s_kunnr. 하시면
s_kunnr 에 값이 없으면 전체고 있으면 그것만 가져오겠죠.
쿼리 두개 써서 코딩이 길어지면 손가락이 아야~ 합니다.
좋은 하루 보내세요.
-
달이랑
2007.10.26 23:49
감사합니다. 좋은 의견.. -
심마니
2008.08.26 03:53
헐....append 안한걸 가지고...
WHERE (GV_ZSDT15_KUNNR).
이렇게 쓰는게 가능 한가요 이렇게 사용할려면 동적 sql문을 사용해야 하는걸로 아는데요?
CALL FUNCTION 'F4_CONV_SELOPT_TO_WHERECLAUSE'
IMPORTING
WHERE_CLAUSE = V_WHERECLAUSE
TABLES
SELOPT_TAB = I_SELOPT