SQL 기초 및 PLSQL 실무 강좌 자료] DECODE 사용시 주의사항


SQL 기초 및 PLSQL 실무 강좌 자료] DECODE 사용시 주의사항


 


실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



DECODE 사용시 주의사항


* 펼칠 컬럼이 너무 많을때는 먼저 GROUP BY 한 후 처리하라.
  


▶   select dept_no,
         sum(decode(substr(wk_dt,7,2),’01’,amt)) d1,
         sum(decode(substr(wk_dt,7,2),’02’,amt)) d2,
         sum(decode(substr(wk_dt,7,2),’03’,amt)) d3,
         sum(decode(substr(wk_dt,7,2),’04’,amt)) d2,
         ,,,
         sum(decode(substr(wk_dt,7,2),’31’,amt)) d31

▶   select dept_no,
         sum(decode(dd,’01’,amt)) d1,
         sum(decode(dd,’02’,amt)) d2,
         sum(decode(dd,’03’,amt)) d3,
         sum(decode(dd,’04’,amt)) d4, 
         ,,,,
         sum(decode(dd,’31’,amt)) d31
     from ( select dept_no, substr(wk_dt,7,2) dd, sum(amt) amt
            from tab1
            where wk_dt like ‘200401%’
          )
     group by dept_no


▶ COUNT, SUM의 비교
      ① sum(decode(col1,’A’,1,0))
      ② sum(decode(col1,’A’,1))
      ③ count(decode(col1,’A’,1,0))
      ④ count(decode(col1,’A’,1))
      ⑤ count(decode(col1,’A’,’C’))


 ①, ②, ④, ⑤ 는 동일하다.

 ③ 의 결과는 count(*) 과 동일하다.

 ①은 ②보다 불리하다(불필요한 0 연산)

 ②는 ④, ⑤ 보다 불리

 ④, ⑤ 는 동일하다.


 SUM은 COUNT에 비해 30~50% 불리함

 COUNT는 not null 인 경우에만 처리

 COUNT를 사용할 수 있다면 SUM을 사용하지 마라.



* DECODE


□ DECODE 함수와 CASE 문

DECODE 함수 내부에서 DECODE문을 사용하는 경우에는 성능저하 발생
 UNION ALL를 사용할 경우 동일 테이블에 대한 인덱스 스캔이나 테이블 스캔 반복발생으로 성능저하
 Concat(‘||’) 함수로 비교대상컬럼를 묶어서 DECODE 함수의 중복사용을 줄이고, CASE 문으로 비교하는 방식 추천

    (INDEX 주의)


 

SQL 기초 및 PLSQL 실무 강좌 자료] DECODE 사용시 주의사항


SQL 기초 및 PLSQL 실무 강좌 자료] DECODE 사용시 주의사항


 


실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



DECODE 사용시 주의사항


* ELSE 없는 IF를 사용하라.
        select sum(decode(col1, 1, qty, 0)),…..
     → select sum(decode(col1, 1, qty)),…..


* 가능한 그룹함수내에서 nvl을 사용하지 마라
       select sum(decode(col1, 1, nvl(qty,0))),…  
   →  select nvl(sum(decode(col1, 1,qty)),0),…


* 가능한 반복해서 DECODE를 사용하지 마라
    
- 컬럼결합법
       select sum(decode(market,'D',
                      decode(type,'1',
                           decode(unit,'A',0.2 * col,
                                       'B',0.5 * col,…

    → select sum(decode(market || type || unit, 'D1A', 0.2,
                                                 'D1B', 0.5,…)) * col


- case문으로 대체 1

 

 

- case문으로 대체 2

 


- case문으로 대체 3

 


- case문으로 대체 4

 


 

Java Web 실무과정] 저장 프로시저와 함수 호출


Java Web 실무과정] 저장 프로시저와 함수 호출


 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



저장 프로시저와 함수 호출



* 저장 프로시저(Stored Procedure)와 함수(Function) 


- 호출방식으로 실행가능한 SQL 코드 블록
- DBMS에서 컴파일하여 저장한 후, 호출 실행하는 방식


* 저장 프로시저와 함수의 차이점은 함수는 호출자에게 단일값(single value)를 반환함.


* 각 DBMS마다 작성 방법이 조금씩 다름


- Oracle : PL/SQL
- SQL Server: TSQL


* 장점


- 네트워크 통신량 절감 및 성능 향상
:
클라이언트에서 여러가지의 SQL문을 보내는 것 보다, 이들 SQL 문들이 포함된 저장 프로시저나 함수를 한번만 호출함으로서

통신량 절감 (컴파일이 미리 되어 있으므로, 재 컴파일 과정이 필요없음)


- 데이터의 무결성 강화
: 테이블의 데이터를 저장 프로시저 또는 함수로만 제어하므로 무결성이 강화되고, 보안에 유리


* 단점


- 저장 프로시저와 함수 작성 방법이 다소 어려움


* 테이블

 

 

 

* 오라클 저장 프로시저​


 



*  저장 프로시저 호출

 

 


* 오라클 함수

 

 

​* 함수 호출

 

Java Web 실무과정] 페이징과 관련된 클래스 및 JSP

Java Web 실무과정] 페이징과 관련된 클래스 및 JSP


 


실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



페이징과 관련된 클래스 및 JSP


* util.Pager

- 페이징과 관련된 정보 초기화
- Eclipse에서 소스 확인

* common/include/pager.jsp

- 페이저모양을 표현
- Eclipse에서 소스 확인

<소스>

* ​Pager 클래스
 

 



* pager.jsp



 

* JSP에서 리스트 표현



 

Java Web 실무과정] 페이징 처리

Java Web 실무과정] 페이징 처리


 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



페이징 처리


* 페이징(Paging)


- 전체 행을 몇 개의 행으로 구성된 페이지로 나누는 것


* 페이징에 관련된 정보


- 전체 행 수
- 전체 페이지 수
- 전체 그룹 수
- 페이지당 행 수(rowsPerPage)
- 현재 페이지(currentPage)
- 그룹당 페이지 수

 

 


* 현재 페이지의 리스트 검색 SQL


- Oracle
   select *
   from
   (
      select rownum rnum, *
      from
      (
       >> select * 
       >> from board
       >> order by bno desc
      )
      where rownum <= (rowsPerPage*currentPage)
)
where rnum > (rowsPerPage*(currentPage-1))


- MySql
    select *
    from freeboard
    Where 조건
    order by 정렬
    limit rowsPerPage*(currentPage-1), rowsPerPage;


* DAO의 페이지 리스트 검색 메서드

 




 

Java Web 실무과정] DTO/DAO 클래스 작성

Java Web 실무과정] DTO/DAO 클래스 작성


 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



DTO/DAO 클래스 작성


* DTO 클래스 작성

- public class DB테이블명


- 각 컬럼


: 프로퍼티로 정의
  - private 필드
  - public gettter,setter 메서드


- 참조 테이블(매핑B타입)


: ArrayList형의 프로퍼티로 정의


* DAO 클래스 작성

- public class DbtableNameDAO


- 기본 메서드


: int insert(param, …) / int insert(objDTO)
: int delete(param, …) / int delete(objDTO)
: int updateXXX(param, …) / int updateXXX(objDTO)
: ArrayList getList([param, …])
: long getCount([param, …])


- 기타 메서드 
 

Java Web 실무과정] DAO/DTO

Java Web 실무과정] DAO/DTO


 


실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



DAO/DTO


* DAO (Data Access Object)

- DB에 데이터를 검색/삽입/수정/삭제를 담당하는 개체
- MVC 모델에서 Model 영역에서 사용
- 일반적으로 DAO와 DB 테이블은 1:1, 1:n 매핑


* DTO (Data Transfer Object)


- DAO에서 메서드의 매개변수 또는 반환형으로 사용
- MVC간의 데이터 전달 목적으로 사용되는 객체
- 일반적으로 DTO와 DB 테이블는 1:1 매핑


* DAO/DTO 테이블 매핑A


- Table1과 Table2가 이종의 데이터일 경우
  
예: 고객과 상품 주문


- PK로서 대량의 FK를 검색할 경우



 

* DAO/DTO 테이블 매핑B


- Table2가 Table1의 확장 데이터일 경우
  
예: 고객과 고객 취미


- PK로서 소량의 FK를 검색할 경우
 

 

SQL 기초 및 PLSQL 실무 강좌 자료] 일반 함수 CASE 함수


SQL 기초 및 PLSQL 실무 강좌 자료] 일반 함수 CASE 함수


 


실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



일반 함수 CASE 함수


* CASE 함수


- CASE 함수는 DECODE 함수의 기능을 확장한 함수


- DECODE 함수는 표현식 또는 칼럼 값이 ‘=‘ 비교를 통해 조건과 일치하는 경우에만 다른 값으로 대치할 수 있지만,

CASE 함수에서는 산술 연산, 관계 연산, 논리 연산과 같은 다양한 비교가 가능


- 또한 WHEN 절에서 표현식을 다양하게 정의


- 8.1.7에서부터 지원되었으며, 9i에서 SQL, PL/SQL에서 완벽히 지원


- DECODE 함수에 비해 직관적인 문법체계와 다양한 비교 표현식 사용


* 사용법

 

 

* 사용 예

​- 교수 테이블에서 소속 학과에 따라 보너스를 다르게 계산하여 출력하여라. 학과 번호별로 보너스는 다음과 같이 계산한다. 학과 번호가 101이면 보너스는 급여의 10%, 102이면 20%, 201이면 30%, 나머지 학과는 0%이다.

 



 

+ Recent posts