SAP ABAP ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด CHAR ํ์ ํ๋ ๊ฐ์ ์๋ฆฌ์ ์ฐจ์ด๋ก ์ธํด ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
ํนํ CONCATENATE์ SELECT INTO ๊ตฌ๋ฌธ์์ CHAR ํ๋์ ๊ณต๋ฐฑ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ ํํ ์ดํดํ์ง ๋ชปํ๋ฉด ๋ฐ์ดํฐ ์๋ฆผ, ๊ณต๋ฐฑ ํฌํจ ๋ฑ ์ ๋ฌธ์ ๋ฅผ ๊ฒช๊ฒ ๋ฉ๋๋ค.
1. ABAP CHAR ํ์ ๊ธฐ๋ณธ ๊ท์น
ABAP์์ CHAR ํ์ ๋ณ์๋ ์ ์ธ๋ ๊ธธ์ด๋งํผ ๊ณ ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ฉฐ, ์ค์ ๊ฐ์ด ์ ์ธ ๊ธธ์ด๋ณด๋ค ์งง์ ๊ฒฝ์ฐ ๋ค์ชฝ์ด ๊ณต๋ฐฑ(Space)์ผ๋ก ์๋ ์ฑ์์ง๋๋ค.
DATA: lv_name(10) TYPE C.
lv_name = 'SAP'.
" ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ์ํ
" lv_name = 'SAP '
" ↑↑↑↑↑↑↑↑↑↑
" 3์๋ฆฌ + ๊ณต๋ฐฑ 7์๋ฆฌ = 10์๋ฆฌ
2. CONCATENATE์ ์๋ฆฌ์ ์ฐ์ฐ
2-1) CONCATENATE ๊ธฐ๋ณธ ์๋ ์๋ฆฌ
CONCATENATE ๊ตฌ๋ฌธ์ ํต์ฌ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ ์์ค ํ๋์ ๋ค์ชฝ ๊ณต๋ฐฑ(Trailing Spaces)์ ์๋์ผ๋ก ์ ๊ฑฐํ ๋ค ๊ฒฐํฉํ๋ค.
2-2) ์ค๋ฌด ์์
DATA: lv_projno LIKE zpst0630-pspid, " CHAR 24
lv_matnr(16) TYPE C. " CHAR 16
lv_projno = '2145'.
CONCATENATE lv_projno '-' '123456789' INTO lv_matnr.
WRITE: lv_matnr.
์คํ ๊ฒฐ๊ณผ
2145-123456789
2-3) ๊ฒฐ๊ณผ์ ๋ํ ๋จ๊ณ๋ณ ๋ถ์
[STEP 1] ๋ณ์ ์ ์ธ๊ณผ ๊ฐ ๋์
lv_projno (CHAR 24) = '2145'
์ค์ ๋ฉ๋ชจ๋ฆฌ:
lv_projno = '2145 '
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
4์๋ฆฌ ๊ฐ + ๊ณต๋ฐฑ 20์๋ฆฌ = ์ด 24์๋ฆฌ
lv_projno๋ CHAR 24๋ก ์ ์ธ๋์์ผ๋ฏ๋ก '2145' ๋ค์ ๊ณต๋ฐฑ 20์๋ฆฌ๊ฐ ์๋์ผ๋ก ์ฑ์์ง๋๋ค.
[STEP 2] CONCATENATE ์คํ - ๊ณต๋ฐฑ ์ ๊ฑฐ ํ ๊ฒฐํฉ
์์ค 1: lv_projno = '2145 ' → ๊ณต๋ฐฑ ์ ๊ฑฐ → '2145'
์์ค 2: '-' → ๊ทธ๋๋ก → '-'
์์ค 3: '123456789' → ๊ทธ๋๋ก → '123456789'
๊ฒฐํฉ ๊ฒฐ๊ณผ: '2145' + '-' + '123456789' = '2145-123456789' (14์๋ฆฌ)
๋ง์ฝ ๊ณต๋ฐฑ ์ ๊ฑฐ๊ฐ ๋์ง ์์๋ค๋ฉด '2145' + ๊ณต๋ฐฑ 20์๋ฆฌ + '-' + '123456789'๋ก ๊ฒฐํฉ๋์ด ์ด 34์๋ฆฌ๊ฐ ๋์์ ๊ฒ์ ๋๋ค.
ํ์ง๋ง CONCATENATE๋ ๊ฐ ์์ค ํ๋์ ๋ค์ชฝ ๊ณต๋ฐฑ์ ์๋์ผ๋ก ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ ์ค์ ๊ฐ๋ง ๊ฒฐํฉ๋ฉ๋๋ค.
[STEP 3] ๊ฒฐ๊ณผ๋ฅผ lv_matnr์ ์ ์ฅ
๊ฒฐํฉ ๊ฒฐ๊ณผ: '2145-123456789' = 14์๋ฆฌ
lv_matnr: CHAR 16
14์๋ฆฌ → 16์๋ฆฌ ๋ณ์์ ์ ์ฅ
= '2145-123456789 '
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
14์๋ฆฌ + ๊ณต๋ฐฑ 2์๋ฆฌ = 16์๋ฆฌ → ์ ์ ์ ์ฅ
2-4) ๊ฒฐํฉ ๊ฒฐ๊ณผ๊ฐ ํ๊ฒ ๋ณ์๋ณด๋ค ๊ธธ ๊ฒฝ์ฐ
DATA: lv_result(10) TYPE C. " CHAR 10
CONCATENATE 'ABCDE' '-' '123456789' INTO lv_result.
" ๊ฒฐํฉ ๊ฒฐ๊ณผ: 'ABCDE-123456789' = 15์๋ฆฌ
" lv_result(10)์๋ 10์๋ฆฌ๋ง ์ ์ฅ
" lv_result = 'ABCDE-1234' ← ๋ค 5์๋ฆฌ ์๋ฆผ!
" sy-subrc = 2 (์๋ฆผ ๋ฐ์)
์ด ๊ฒฝ์ฐ ABAP์ sy-subrc๋ฅผ 2๋ก ์ค์ ํ์ฌ ์๋ฆผ์ด ๋ฐ์ํ์์ ์๋ ค์ค๋๋ค.
์ค๋ฌด์์๋ ๋ฐ๋์ ํ๊ฒ ๋ณ์์ ๊ธธ์ด๋ฅผ ์ถฉ๋ถํ ํ๋ณดํด์ผํฉ๋๋ค.
2-5) RESPECTING BLANKS ์ต์
๊ณต๋ฐฑ์ ์ ์งํ ์ฑ ๊ฒฐํฉํ๊ณ ์ถ๋ค๋ฉด RESPECTING BLANKS ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
DATA: lv_projno(24) TYPE C VALUE '2145'.
DATA: lv_result(40) TYPE C.
" ๊ณต๋ฐฑ ์ ๊ฑฐ (๊ธฐ๋ณธ ๋์)
CONCATENATE lv_projno '-' '123' INTO lv_result.
" ๊ฒฐ๊ณผ: '2145-123'
" ๊ณต๋ฐฑ ์ ์ง
CONCATENATE lv_projno '-' '123' INTO lv_result RESPECTING BLANKS.
" ๊ฒฐ๊ณผ: '2145 -123'
" → lv_projno์ ๊ณต๋ฐฑ 20์๋ฆฌ๊ฐ ๊ทธ๋๋ก ํฌํจ๋จ
RESPECTING BLANKS๋ฅผ ์ฌ์ฉํ๋ฉด CHAR 24 ์ ์ฒด๊ฐ ๊ฒฐํฉ์ ํฌํจ๋๋ฏ๋ก ๊ฒฐ๊ณผ ๊ธธ์ด๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ๊ธฐ๋ณธ ๋์(๊ณต๋ฐฑ ์ ๊ฑฐ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
3. ์ฟผ๋ฆฌ์ ์๋ฆฌ์ ์ฐ์ฐ
3-1) SELECT INTO ๊ธฐ๋ณธ ์๋ ์๋ฆฌ
SELECT INTO๋ DB ํ๋ ๊ฐ์ ABAP ๋ณ์์ ๋์ ํฉ๋๋ค.
์ด๋ ์๋ฆฌ์ ์ฐ์ฐ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ค(DB ํ๋)๋ณด๋ค ํ๊ฒ(ABAP ๋ณ์)์ด ํฌ๋ฉด ๋ค์ชฝ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์ฐ๊ณ , ํ๊ฒ์ด ์์ผ๋ฉด ๋ค์์ ์๋ฆฐ๋ค.
3-2) WHERE ์กฐ๊ฑด ๋น๊ต ๊ท์น
CHAR ํ์ ๋น๊ต ์ ๋ค์ชฝ ๊ณต๋ฐฑ์ ๋ฌด์ํ๊ณ ์ค์ ๊ฐ๋ง ๋น๊ตํ๋ค.
3-3) ์ค๋ฌด ์์
DATA: lv_projno LIKE zpst0630-pspid, " CHAR 24
lv_posid(16) TYPE C. " CHAR 16
lv_projno = '2514'.
SELECT SINGLE posid
INTO lv_posid
FROM ztable123
WHERE zzpjtno = lv_projno.
WRITE: lv_posid.
ํ ์ด๋ธ ํ๋ ํ์ :
- ztable123-pspid: CHAR 24
- ztable123 -posid: CHAR 6
์คํ ๊ฒฐ๊ณผ
ABC123 (์ ์ ์ถ๋ ฅ)
3-4) ๊ฒฐ๊ณผ์ ๋ํ ๋จ๊ณ๋ณ ๋ถ์
[STEP 1] ๋ณ์ ์ ์ธ๊ณผ ๊ฐ ๋์
lv_projno (CHAR 24) = '2514'
์ค์ ๋ฉ๋ชจ๋ฆฌ:
lv_projno = '2514 '
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
4์๋ฆฌ ๊ฐ + ๊ณต๋ฐฑ 20์๋ฆฌ = ์ด 24์๋ฆฌ
[STEP 2] WHERE ์กฐ๊ฑด ๋น๊ต — ๊ณต๋ฐฑ ๋ฌด์ ๋น๊ต
DB ํ๋ zzpjtno = '2514'
lv_projno = '2514 '
CHAR ํ์
๋น๊ต ์ ๋ค์ชฝ ๊ณต๋ฐฑ์ ๋ฌด์๋จ
→ '2514' = '2514' → ์ผ์น! โ
ABAP์ CHAR ๋น๊ต ๊ท์น์ ๋ฐ๋ผ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๋ CHAR ํ๋๋ฅผ ๋น๊ตํ ๋ ์งง์ ์ชฝ์ ๊ณต๋ฐฑ์ ์ฑ์ด ๋ค ๋น๊ตํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์ชฝ ๊ณต๋ฐฑ์ ๋ฌด์๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ด ๊ท์น ๋๋ถ์ lv_porjno๊ฐ CHAR 24๋ก ์ ์ธ๋์ด ์์ด๋ WHERE ์กฐ๊ฑด์ด ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
[STEP 3] SELECT INTO — ์์ ๊ฐ์ ํฐ ๋ณ์์ ๋์
DB ํ๋ posid (CHAR 6) = 'ABC123'
ํ๊ฒ lv_posid (CHAR 16)
์์ค(6์๋ฆฌ) → ํ๊ฒ(16์๋ฆฌ) ๋์
:
lv_posid = 'ABC123 '
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
6์๋ฆฌ ๊ฐ + ๊ณต๋ฐฑ 10์๋ฆฌ = 16์๋ฆฌ
→ ๋ฐ์ดํฐ ์์ค ์์ด ์ ์ ์ ์ฅ โ
3-5) ๋์ ๋ฐฉํฅ ๋ณ ๋์ ๋น๊ต
[์ผ์ด์ค 1] ์์ค < ํ๊ฒ (์์ → ํฐ) — ์์
" DB ํ๋: CHAR 6, ๋ณ์: CHAR 16
DATA: lv_posid(16) TYPE C.
SELECT SINGLE posid INTO lv_posid FROM ztable WHERE ...
" posid = 'ABC123' (6์๋ฆฌ)
" lv_posid = 'ABC123 ' (๋ค ๊ณต๋ฐฑ ์ฑ์, 16์๋ฆฌ)
" → ๋ฐ์ดํฐ ์์ค ์์ โ
[์ผ์ด์ค 2] ์์ค = ํ๊ฒ (๊ฐ์ ํฌ๊ธฐ) — ์์
" DB ํ๋: CHAR 6, ๋ณ์: CHAR 6
DATA: lv_posid(6) TYPE C.
SELECT SINGLE posid INTO lv_posid FROM ztable WHERE ...
" posid = 'ABC123' (6์๋ฆฌ)
" lv_posid = 'ABC123' (๊ทธ๋๋ก ๋์
, 6์๋ฆฌ)
" → ๋ฐ์ดํฐ ์์ค ์์ โ
[์ผ์ด์ค 3] ์์ค > ํ๊ฒ (ํฐ → ์์) — ์ฃผ์!
" DB ํ๋: CHAR 6, ๋ณ์: CHAR 4
DATA: lv_posid(4) TYPE C.
SELECT SINGLE posid INTO lv_posid FROM ztable WHERE ...
" posid = 'ABC123' (6์๋ฆฌ)
" lv_posid = 'ABC1' (๋ค 2์๋ฆฌ ์๋ฆผ!)
" → ๋ฐ์ดํฐ ์์ค ๋ฐ์ โ ๏ธ