SQL์ ์ฌ์ฉํ ๋ ์ฐ๋ฆฌ๋ ๋ณดํต "SELECT๋ฅผ ์ฐ๋ฉด ๋น์ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB)๋ก ์์ฒญ์ด ๊ฐ๋ค"๋ผ๊ณ ์๊ฐํ๋ค. ํ์ง๋ง, ABAP 7.52 ์ดํ ๋ฑ์ฅํ FROM @itab ๊ตฌ๋ฌธ์์๋ ์ํฉ์ด ์กฐ๊ธ ๋ค๋ฅด๋ค. ์ธํฐ๋ ํ ์ด๋ธ๊น์ง (@itab)์ ๋ฐ์ดํฐ ์์ค๋ก ์ฌ์ฉํ๋ฉด, ๊ณผ์ฐ ํญ์ Database ์๋ฒ (DB ๋ ์ด์ด)๊น์ง ๋ค๋ ์ค๋ ๊ฑธ๊น?
๐Database ๋ ์ด์ด๋?
๐[ABAP Concept (๐๊ฐ๋ )/Basic] - SAP 3-Tier ๊ตฌ์กฐ ์ฝ๊ฒ ์ดํดํ๊ธฐ
SAP 3-Tier ๊ตฌ์กฐ ์ฝ๊ฒ ์ดํดํ๊ธฐ
SAP๋ฅผ ์ฒ์ ๋ฐฐ์ฐ๊ฑฐ๋ ABAP ํ๋ก๊ทธ๋๋ฐ์ ์์ํ๋ค๋ฉด ํ ๋ฒ์ฏค ์ด๋ฐ ๋ง์ ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. SAP๋ 3-Tier ๊ตฌ์กฐ๋ก ๋์ด ์์ด์. ๊ทผ๋ฐ ๊ทธ๊ฒ ๋๋์ฒด ๋ฌด์จ ๋ป์ด์ง? ํ๋ ์ ํ ์ด์ ? ์ ํ๋ฆฌ์ผ์ด์ ? ๋ฐ
twossun.tistory.com
์ค๋์ ํด๋น ์ง๋ฌธ์ ์ค์ฌ์ผ๋ก
- FROM @itab์ ๊ธฐ๋ณธ ๊ฐ๋
- ์ค์ ์ด๋ค ๊ฒฝ์ฐ์ Database ์๋ฒ(DB ๋ ์ด์ด)๋ฅผ ํ๊ณ
- ์ด๋ค ๊ฒฝ์ฐ์๋ Application ์๋ฒ(AS ABAP) ๋ฉ๋ชจ๋ฆฌ์์๋ง ๋๋๋์ง
์์๋ณด๋๋ก ํ๊ฒ ๋ค.
1. FROM @itab ๊ธฐ๋ณธ ๊ฐ๋ , ์ฌ์ฉ ๋ฐฉ๋ฒ
ABAP 7.52๋ถํฐ๋ SELECT๋ฌธ์ FROM์ ์ Internal Table์ ์ง์ ์ฌ์ฉํ ์ ์๋ค.
SELECT carrid FROM @itab AS it_scarr INTO TABLE @DATA(result).
- @๋ฅผ ๋ถ์ฌ์ ๋ด๋ถ ํ ์ด๋ธ์ SQL ๋ฌธ๋ฒ ์์์ ์ง์ ์ฐธ์กฐ
- ๋ฐ๋์ AS alias๋ฅผ ์ฌ์ฉํด์ ๋ณ์นญ์ ์ง์
- ์ธํฐ๋ํ ์ด๋ธ์ด ๋ง์น DB ํ ์ด๋ธ์ฒ๋ผ ๋์
โ ๏ธ ์ฃผ์ํ ์ ์, FROM @itab์ ์ด๋ค๊ณ ๋ฌด์กฐ๊ฑด DB๋ก ์ ์ก๋๋ ๊ฑด ์๋๋ผ๋ ์ ์ด๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ(AS ABAP ์๋ฒ)์์๋ง ์๋ํ๊ฑฐ๋, DB ๋ ์ด์ด๊น์ง ์ ์ก๋ ์ ์๋ค.
2. FROM @itab ๋จ๋ ์ฌ์ฉ ์ ๊ธฐ๋ณธ ๋์
- ๋ค๋ฅธ DB ํ ์ด๋ธ JOIN ์์ด FROM @itab๋ง ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋๋ค๋ฉด, ์ธํฐ๋ ํ ์ด๋ธ์ Application ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์์ ์กฐํ๋๋ค. ์ฆ, Database Layer(DB ์๋ฒ)๋ก ์ ์ก๋์ง ์๊ณ , SAP ์๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋ค.
โ Application ์๋ฒ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฑด ( ๋ค์ ๋ด์ฉ์ ๋ชจ๋ ์ถฉ์กฑ )
- ์ค์ง ์ธํฐ๋ํ ์ด๋ธ ํ๋๋ง ์กฐํํ๋ฉฐ, ๋จ์ select, where ์กฐ๊ฑด์ธ ๊ฒฝ์ฐ
- DB ํ ์ด๋ธ์ด๋ ๋ค๋ฅธ ์ธ๋ถ ๊ฐ์ฒด์ Join, Subquery, Sorting ๊ฐ์ ๋ณต์กํ ์ฐ์ฐ๋ ์์
- ์ง๊ณ ํจ์, SQL ํํ์์ ์ฌ์ฉํ์ง ์์
3. FROM @itab์ธ๋ฐ DB๋ฅผ ํ๋ ๊ฒฝ์ฐ
- SELECT๋ฌธ์ ํน์ SQL ์ฐ์ฐ์ด ํฌํจ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด DB๋ฅผ ํ๊ฒ ๋๋ค.
โ DB๋ฅผ ํ๋ ์กฐ๊ฑด ( ๋ค์ ๋ด์ฉ ์ค ํ๋๋ผ๋ ์ถฉ์กฑ ํ๋ฉด )
| ์กฐ๊ฑด | ์์ | ์ค๋ช |
| ์ง๊ณ ํจ์ ์ฌ์ฉ | SUM(), COUNT(), AVG() | SQL ์ง๊ณ ์ฐ์ฐ์ DB๋ง ๊ฐ๋ฅ |
| DISTINCT ์ฌ์ฉ | SELECT DISTINCT field FROM @itab | ์ค๋ณต ์ ๊ฑฐ๋ DB ์ฐ์ฐ |
| SQL ํํ์ ์ฌ์ฉ | CASE, COALESCE, SUBSTRING ๋ฑ | SQL ์์ง์ด ํ์ |
| GROUP BY ์ฌ์ฉ | GROUP BY field | ๊ทธ๋ฃนํ ์ฐ์ฐ์ DB๋ง ์ฒ๋ฆฌ |
| DB ํ ์ด๋ธ๊ณผ JOIN | INNER JOIN DBํ ์ด๋ธ | DB ๋ ์ด์ด์์ ์กฐ์ธ ์ํ |
์ฆ, FROM์ @itab๋ง ์์ด๋, SELECT๋ฌธ ์์์ SUM, DISTINCT, CASE, GROUP BY ๊ฐ์ SQL ์ฐ์ฐ์ด ๋์ค๋ฉด โก ์ธํฐ๋ ํ ์ด๋ธ์ DB๋ก ์์ ์ ์กํด์ ๊ฑฐ๊ธฐ์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ค.
SELECT a~carrid, b~connid
FROM @itab AS a INNER JOIN spfli AS b ON a~carrid = b~carrid
INTO TABLE @DATA(join_result).
SELECT FROM @lt_vbap AS itab
FIELDS vbeln, SUM( kwmeng ) as kwmeng
GROUP BY vbeln INTO TABLE @data(lt_sum).
์์ ๊ฐ์ด ์ธํฐ๋ ํ ์ด๋ธ ๋จ๋ ์ผ๋ก ์ฌ์ฉํ๋ฉด์, ์ง๊ณ ํจ์๋ฑ์ ์ฌ์ฉํ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ณผ ์ ์๋ค.

๐ก ํด๋น Syntax Check ๊ฒฝ๊ณ ๋ฅผ skip ํ๊ณ ์ถ์ผ๋ฉด ์ฟผ๋ฆฌ ๋ง์ง๋ง ๋ถ๋ถ์ ํ๋ผ๊ทธ๋ง ##itab_db_select ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
๐ Pragma(ํ๋ผ๊ทธ๋ง)
์ฃผ๋ก ๋ฌธ๋ฒ ์ค๋ฅ๋ ๊ฒฝ๊ณ ๋ฅผ ์ต์ ํ๊ฑฐ๋ ์์ธ์ ์ธ ์ํฉ์ ๋ช ์์ ์ผ๋ก ํ์ฉํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ฐํ์ ๋์์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
โ๏ธ ์ ์์ ์ธ ์ฝ๋ฉ์ธ๋ฐ๋ ์ปดํ์ผ๋ฌ๊ฐ ๊ฒฝ๊ณ ๋ฅผ ๋์ธ ๋
โ๏ธ SAP ํ์ค ์ฝ๋๋ ๋ ๊ฑฐ์ ์ฝ๋์ ํธํ์ฑ์ ์ ์งํด์ผ ํ ๋
โ๏ธ ์์ธ ์ํฉ์ ๋ช ์์ ์ผ๋ก ๋ฌด์ํ๊ณ ์ ํ ๋
4. ์คํ ๋ค๋ ABAP Guide ์ฌํญ
- Internal Table์ SELECT๋ก ์ฐ๋ ๊ฑด ์ฑ๋ฅ์ ๋นํจ์จ์ ์ผ ์ ์์
- READ TABLE, LOOP AT ๊ฐ์ ๊ณ ์ ์ ์ธ ABAP ๋ฐฉ์์ด ๋ ๋น ๋ฅผ ์ ์์
- SELECT๋ฅผ ๊ตณ์ด ์ฌ์ฉํ๋ ์ด์ ๋ผ๋ฉด SQL ๋ฌธ๋ฒ์ ํ์ฉํด์ผ ํ๋ ํน๋ณํ ๊ฒฝ์ฐ (JOIN, Aggregation ๋ฑ)์ ํ์ ํด์ผ ํจ