EMP, DEPT 클립리포트 실습 문제 해설본
CAUTION
이 문서는 강사용 해설본입니다. 학습자에게 배포하지 말고, 채점 기준과 풀이 방향을 확인할 때만 사용하세요.
데이터 확인
| 테이블 | 건수 | 컬럼 | 설명 |
|---|---|---|---|
DEPT |
6 | DEPTNO |
부서번호 |
DEPT |
6 | DNAME |
부서명 |
DEPT |
6 | LOC |
지역 |
EMP |
10 | EMPNO |
사원번호 |
EMP |
10 | ENAME |
사원명 |
EMP |
10 | JOB |
직무 |
EMP |
10 | MGR |
관리자 사원번호 |
EMP |
10 | HIREDATE |
입사일 |
EMP |
10 | SAL |
급여 |
EMP |
10 | COMM |
수당 |
EMP |
10 | DEPTNO |
부서번호 |
특이 데이터:
COMM은NULL인 행이 많고,TURNER는0입니다.ENAME에131BLAKE처럼 숫자가 포함된 값이 있습니다.DEPT에는 사원이 없는 부서가 있습니다. 예:40,50,60
공통 해설
모든 문제는 Prepared Statement 방식으로 조회조건을 전달하게 유도합니다. 문제지에는 기능명을 직접 노출하지 않고, “화면에서 입력받은 조회조건을 데이터셋 조건으로 전달”한다고만 표현했습니다.
날짜는 쿼리에서 YYYYMMDD 문자로 만들고, 디자이너 출력양식에서 문제별 요구 결과와 같은 항목을 선택하게 합니다.
TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD
문제별 예상 출력:
문제 1, 2: 20260308 -> 2026-03-08 목
문제 3: 20260308 -> 2026.03.08 목요일
하단 페이지 번호는 학습자에게 PageNofM이라는 이름을 직접 주지 않고, 1/2, 2/2처럼 보이게 하라고 출제했습니다. 해설에서는 시스템 필드 PageNofM을 사용하면 됩니다.
문제 1 해설. 사원 목록 출력물
의도
기본 목록 출력, 매 페이지 반복 제목, 페이지 하단, 시스템 번호, 날짜 출력양식, 조회조건 전달을 확인하는 문제입니다.
조회조건
| 조건 | 데이터셋 파라미터 | 교체 형식 |
|---|---|---|
JOB |
PS_JOB |
'{value}' |
예시 SQL
SELECT A.EMPNO AS EMPNO
, A.ENAME AS ENAME
, A.JOB AS JOB
, A.MGR AS MGR
, TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD
, A.SAL AS SAL
, A.COMM AS COMM
, A.DEPTNO AS DEPTNO
FROM EMP A
WHERE 1 = 1
AND (A.JOB = {dataset.PS_JOB} OR {dataset.PS_JOB} IS NULL)
ORDER BY A.EMPNO
NOTE
디자이너에서 빈 문자열 처리가 어렵다면 파라미터 기본값을 NULL로 넘기거나, 조건 없이 전체 조회되는 별도 처리 방식을 사용해도 됩니다. 핵심은 JOB 값이 있을 때 여러 건이 나올 수 있는 조건이어야 한다는 점입니다.
리포트 구성
| 요구사항 표현 | 해설 |
|---|---|
| 제목이 매 페이지마다 보임 | 페이지 머리글 사용 |
| 하단이 매 페이지마다 보임 | 페이지 바닥글 사용 |
1/2, 2/2 형식 |
시스템 필드 PageNofM 사용 |
| 순번 기본 번호 필드 | 시스템 필드 또는 디자이너 제공 행 번호 필드 사용 |
2026-03-08 목 |
출력양식 yyyy-mm-dd aaa 선택 |
채점 포인트
- 문제지에 기능명이 없어도 페이지 머리글/바닥글을 찾아 썼는가
JOB조건이 데이터셋 파라미터로 전달되는가- 조건을 비웠을 때 전체 사원이 출력되는가
- 입사일이
YYYYMMDD원본이 아니라yyyy-mm-dd aaa형태로 보이는가 - 하단 페이지 번호가
PageNofM글자가 아니라1/2처럼 렌더링되는가
문제 2 해설. 부서별 사원 상세 출력물
의도
서브리포트를 부서 행의 일부 칸에 넣는 것이 아니라, 부서 정보 아래의 가로 전체 영역으로 배치하도록 유도합니다. 메인 DEPT, 서브 EMP 구조가 가장 자연스럽습니다.
메인 데이터셋 조회조건
| 조건 | 데이터셋 파라미터 | 교체 형식 |
|---|---|---|
LOC |
PS_LOC |
'{value}' |
메인 데이터셋 SQL
SELECT A.DEPTNO AS DEPTNO
, A.DNAME AS DNAME
, A.LOC AS LOC
FROM DEPT A
WHERE 1 = 1
AND (A.LOC = {dataset.PS_LOC} OR {dataset.PS_LOC} IS NULL)
ORDER BY A.DEPTNO
서브 데이터셋 SQL
SELECT A.EMPNO AS EMPNO
, A.ENAME AS ENAME
, A.JOB AS JOB
, TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD
, A.SAL AS SAL
, NVL(TO_CHAR(A.COMM), '-') AS COMM_TEXT
, A.DEPTNO AS DEPTNO
FROM EMP A
WHERE A.DEPTNO = {dataset.PS_DEPTNO}
ORDER BY A.EMPNO
서브리포트 파라미터 연결
| 구분 | 값 |
|---|---|
| 서브 데이터셋 파라미터 | PS_DEPTNO |
| 교체 형식 | {value} |
| 연결 값 | 메인 데이터셋의 DEPTNO |
배치 기준
| 영역 | 구성 |
|---|---|
| 메인 본문 | 부서번호, 부서명, 지역 |
| 서브리포트 | 부서 아래 가로 전체 영역에 사원 목록 출력 |
| 서브리포트 하단 | 부서별 급여 합계 |
공식 필드 예시
| 공식 필드 | 용도 |
|---|---|
DEPT_SUM_SAL |
현재 부서의 급여 합계 |
var result = rexpert.sum("본문", "SAL", false, "", "");
return result;
IMPORTANT
실제 요약 범위명은 디자이너에서 생성된 섹션/그룹 이름에 맞춰 조정해야 합니다. 해설의 핵심은 서브리포트 내부에서 부서별 합계를 계산한다는 점입니다.
채점 포인트
DEPT와EMP를 각각 별도 데이터셋으로 만들었는가LOC조건이 메인 데이터셋에 전달되는가- 서브리포트가 한 줄 전체 폭을 사용하는 형태인가
- 서브리포트가 메인 부서의
DEPTNO를 받아 해당 부서 사원만 출력하는가 COMM의NULL이-로 표시되는가- 부서별 급여 합계가 표시되는가
문제 3 해설. 부서/직무별 사원 현황 출력물
의도
조인된 평면 데이터를 출력물에서 부서/직무 계층으로 다시 나누는 문제입니다. 그룹 섹션, 그룹 바닥글, 공식 필드, 조건스타일, 조회조건 전달을 함께 확인합니다.
조회조건
| 조건 | 데이터셋 파라미터 | 교체 형식 |
|---|---|---|
| 최소 급여 | PS_MIN_SAL |
{value} |
예시 SQL
SELECT B.DEPTNO AS DEPTNO
, B.DNAME AS DNAME
, B.LOC AS LOC
, A.JOB AS JOB
, A.EMPNO AS EMPNO
, A.ENAME AS ENAME
, A.MGR AS MGR
, TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD
, A.SAL AS SAL
, A.COMM AS COMM
, NVL(TO_CHAR(A.COMM), '-') AS COMM_TEXT
FROM DEPT B
INNER JOIN EMP A
ON A.DEPTNO = B.DEPTNO
WHERE 1 = 1
AND (A.SAL >= {dataset.PS_MIN_SAL} OR {dataset.PS_MIN_SAL} IS NULL)
ORDER BY B.DEPTNO
, A.JOB
, A.ENAME
그룹 구성
| 그룹 단계 | 기준 필드 | 배치 위치 |
|---|---|---|
| 1단계 | DEPTNO |
부서 머리/바닥 영역 |
| 2단계 | JOB |
직무 머리/바닥 영역 |
그룹은 바깥쪽부터 안쪽으로 추가합니다.
- 부서 기준 그룹 생성
- 직무 기준 그룹 생성
- 본문에 사원 행 배치
- 직무 바닥 영역에 직무별 급여 합계 배치
- 부서 바닥 영역에 부서별 급여 합계 배치
- 보고서 마지막 영역에 전체 급여 합계와 전체 평균 급여 배치
공식 필드 예시
| 공식 필드 | 요약 범위 | 요약 필드 | 출력 위치 |
|---|---|---|---|
JOB_SUM_SAL |
직무 그룹 | SAL |
직무 바닥 영역 |
DEPT_SUM_SAL |
부서 그룹 | SAL |
부서 바닥 영역 |
TOTAL_SUM_SAL |
전체 | SAL |
보고서 마지막 영역 |
TOTAL_AVG_SAL |
전체 | SAL |
보고서 마지막 영역 |
조건스타일 예시
| 조건 | 적용 대상 | 스타일 |
|---|---|---|
SAL >= 3000 |
본문 행 또는 급여 칸 | 배경색 강조, 굵게 |
COMM_TEXT != '-' |
수당 칸 | 글자색 강조 |
ENAME == 'KING' |
사원명 칸 또는 행 | 테두리/배경 강조 |
WARNING
행 전체 강조가 어려우면 급여 칸, 수당 칸, 사원명 칸처럼 칸 단위로 적용해도 됩니다.
채점 포인트
PS_MIN_SAL조건이 Prepared Statement 방식으로 전달되는가- 조건을 비워 두었을 때 여러 부서와 여러 직무가 출력되는가
- 입사일이
YYYYMMDD원본이 아니라yyyy.mm.dd aaaa형태로 보이는가 - 부서/직무 그룹 순서가 자연스러운가
- 직무별 소계와 부서별 소계가 각각 다른 위치에 표시되는가
- 전체 합계/평균이 마지막에 표시되는가
- 조건스타일이 2개 이상 실제 출력 결과에 보이는가
- 하단 페이지 번호가
1/2처럼 표시되는가
전체 평가 기준
| 항목 | 배점 예시 | 확인 내용 |
|---|---|---|
| 조회조건 전달 | 15 | 각 문제의 조건이 데이터셋 조건으로 전달됨 |
| 데이터셋 구성 | 15 | 문제별 데이터셋 수와 SQL 의도 일치 |
| 섹션 활용 | 20 | 반복 제목, 하단, 그룹, 본문, 소계 영역 사용 |
| 필드 및 출력양식 | 15 | 날짜, 숫자, 정렬, 여백 |
| 서브리포트 | 15 | 전체 폭 배치와 파라미터 연결 |
| 공식 필드 | 10 | 소계/합계/평균 계산 |
| 조건스타일 | 5 | 조건과 스타일 적용 |
| 결과 이미지 제출 | 5 | 각 문제별 결과 이미지 첨부 |
제출물 확인 문구
학습자에게는 다음 기준으로 피드백하면 좋습니다.
1번은 기본 목록 출력, 반복 제목/하단, 날짜 출력양식을 보는 문제입니다.
2번은 데이터셋 분리와 하위 출력 영역 연결을 보는 문제입니다.
3번은 조인 결과를 부서/직무 단위로 다시 구조화하는 능력을 보는 문제입니다.