2009 Dec 10 1:50 PM
Hi everybody, the idea of the following query is to get the customers that some of their fields match partially or totally with an input text pattern (w_text_pattern).
CONCATENATE '%' im_pattern '%' INTO w_text_pattern.
SELECT * INTO TABLE customer_list
FROM kna1
WHERE kunnr LIKE w_text_pattern OR
name1 LIKE w_text_pattern OR
name2 LIKE w_text_pattern OR
ort01 LIKE w_text_pattern OR
pstlz LIKE w_text_pattern OR
regio LIKE w_text_pattern OR
stras LIKE w_text_pattern OR
telf1 LIKE w_text_pattern OR
telfx LIKE w_text_pattern.
The query is working fine, but the LIKE word has a limitation where w_text_pattern can not have more than 6 characters. The question is:
Is there another way to do that avoiding the restrction of the LIKE word?
Thanks and Regards.
2009 Dec 10 2:11 PM
Hi,
try to create ranges:
RANGES: lr_kunnr for kna1-kunnr,
ls_kunnr LIKE LINE OF lr_kunnr.
CONCATENATE '%' im_pattern '%' INTO w_text_pattern.
ls_kunnr-sign = 'I'.
ls_kunnr-option = 'CP'.
ls_kunnr-low = w_text_pattern.
append ls_kunnr to lr_kunnr.
SELECT * INTO TABLE customer_list
FROM kna1
WHERE kunnr IN lr_kunnr and
...
The only problem is to create one range for each field...
Regards,
Frisoni
Hi everybody, the idea of the following query is to get the customers that some of their fields match partially or totally with an input text pattern (w_text_pattern).
CONCATENATE '%' im_pattern '%' INTO w_text_pattern.
SELECT * INTO TABLE customer_list
FROM kna1
WHERE kunnr LIKE w_text_pattern OR
name1 LIKE w_text_pattern OR
name2 LIKE w_text_pattern OR
ort01 LIKE w_text_pattern OR
pstlz LIKE w_text_pattern OR
regio LIKE w_text_pattern OR
stras LIKE w_text_pattern OR
telf1 LIKE w_text_pattern OR
telfx LIKE w_text_pattern.
The query is working fine, but the LIKE word has a limitation where w_text_pattern can not have more than 6 characters. The question is:
Is there another way to do that avoiding the restrction of the LIKE word?
Thanks and Regards.
2009 Dec 10 2:11 PM
Hi,
try to create ranges:
RANGES: lr_kunnr for kna1-kunnr,
ls_kunnr LIKE LINE OF lr_kunnr.
CONCATENATE '%' im_pattern '%' INTO w_text_pattern.
ls_kunnr-sign = 'I'.
ls_kunnr-option = 'CP'.
ls_kunnr-low = w_text_pattern.
append ls_kunnr to lr_kunnr.
SELECT * INTO TABLE customer_list
FROM kna1
WHERE kunnr IN lr_kunnr and
...
The only problem is to create one range for each field...
Regards,
Frisoni
2009 Dec 11 3:03 PM
Thanks, your anwser was the solution, but I had to use '*' instead '%' in the concatenate statement. Thanks again.
2009 Dec 10 2:27 PM
Hi Fernando Franzolini,
There is no such limit of 6 Characters .. Please have a look on below example
Try declaring w_text_pattern of more length and assign more then 6 characters in it and check out...
REPORT ZILESH_TEST_LIKE.
PARAMETERS: P_NAME(40) TYPE C .
DATA L_SRCH_STR(60) TYPE C .
DATA L_ENAME LIKE P0001-ENAME .
CONCATENATE '%' P_NAME '%' INTO L_SRCH_STR .
SELECT ENAME FROM PA0001
INTO L_ENAME
WHERE ENAME LIKE L_SRCH_STR .
WRITE:/ L_ENAME .
ENDSELECT .Hope it will solve your problem..
Thanks & Regards
ilesh 24x7
ilesh Nandaniya
2009 Dec 10 8:48 PM
Hi thanks for your answer, but if I assign something with more than 6 characters the system shows me the following dump:
Short text
ABAP/4 Open SQL statement with WHERE ... LIKE and pattern too long.
Error analysis
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_DYNAMIC_OSQL_SEMANTICS', was
not caught in
procedure "Y_FA_GET_CUSTOMER_LIST" "(FUNCTION)", nor was it propagated by a
RAISING clause.
Since the caller of the procedure could not have anticipated that the
exception would occur, the current program is terminated.
The reason for the exception is:
The current ABAP program attempted to execute an Open SQL statement in
which the WHERE condition contains a LIKE operator.
The pattern belonging to a LIKE operator should be (with the exception
of closing blanks) no more than 6 characters long. This is a minimum
of 256 and twice as long as the database field (3) to which the
condition
applies.
In this particular case, the pattern contains
"%ASDDDEEEER%"
more than the maximum permitted 6 valid characters.
2009 Dec 10 11:05 PM
Hi Fernando,
you use the pattern to check against a couple of fields. If you check pattern %ASDDDEEEER% it will match all text fields containing string ASDDDEEEER.
Then, for me, it is given that the field that is checked ha a minimum length of 10 characters. I'm not on the system now, but regio field is probably shorter. Thats why it dumps.
Just think abaout what you are coding.
I would use ranges anyway, but then it is ASDDDEEEER not %ASDDDEEEER% as some wannabe recommended.
Regards,
Clemens
2009 Dec 10 10:34 PM
| User | Count |
|---|---|
| 6 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |