by 강정식 [강정식] dynamicsql dynamicquery dynamic sql dynamic query [2008.05.29 16:41:54]
Dynamic SQL 사용방법
안녕하세요. 강정식입니다.
이번에는 Q&A 게시판에 자주 올라오는 질문 중 Dynamic SQL 내용이 자주 올라오는것 같아
이번 기회에 그 용도와 사용방법을 설명해 드리고자 글을 쓰게 되었습니다.
이해를 돕기 위해 EMP 테이블과 DETP 테이블을 이용한 어플리케이션 화면을 가지고 설명을
드리겠습니다.
[EMP 데이터]
[DEPT 데이터]
[EMP 테이블과 DETP 테이블을 이용하여 만든 어플리케이션 화면]
만약 위의 화면처럼 3개의 선택조건이 주어져 있고 이를 바탕으로 FIND 할 때 데이터를 가져오게
하려면 다음과 같이 2개의 방식으로 SQL을 작성하실 수 있으실겁니다.
즉, STATIC SQL은 SQL이 고정된 상태로 선택조건들을 모두 포함하기 위해 선택조건이 안 들어올
경우를 대비하기 위해 NVL() 함수를 사용하였지만, DYNAMIC SQL은 조건이 들어올 때만 WHERE 조건에
조건이 추가될 수 있게 만드는 것입니다. 물론 위에 DYNAMIC SQL을 표현한 것처럼 IF ELSE 구문을
사용하면 SYNTAX ERROR가 나오기 때문에 다른 방법으로 접근을 해야 하지만요.
그럼 STATIC SQL과 DYNAMIC SQL을 비교하면서 설명을 드리겠습니다.
[STATIC과 DYNAMIC 비교]
결국 STATIC SQL이라는 것은 고정된 SQL형태를 만든 뒤에 이 SQL형태로 모든 조건들을 처리해야 하는 반면,
DYNAMIC SQL은 여러 로직으로 조건에 해당되는 SQL을 변수에 담아서 만든 뒤에 DBMS를 콜하기 때문에
보다 풍부한 SQL을 작성할 수 있습니다.
이처럼 DYNAMIC SQL이 STATIC SQL보다 여러 장점이 있는데도 불구하고 잘 사용되지 않는건 개발 난이도도 높고
개발시간도 현저히 늘어난다는 것입니다. 또한 STATIC SQL이 직관적으로 볼 수 있는 반면 DYNAMIC SQL은
로직으로 SQL을 만들어나가는 것이기 때문에 직관적이지 못하죠.
이제 STATIC SQL과 DYNAMIC SQL의 차이점을 알았으니 위에서 설명한 어플리케이션 화면을 PROCEDURE에서 어떻게
개발하는지 살펴보도록 하겠습니다.
[STATIC SQL, DYNAMIC SQL 처리방식 비교]
[STATIC SQL] [DYNAMIC SQL]
1. STATIC SQL 개발패턴
2. DYNAMIC SQL 개발패턴
이제 어느정도 STATIC과 DYNAMIC 비교가 되시나요? 제 개인적으로는 OLTP처럼 다양한 조건을 수용해야 할 경우에는
DYNAMIC SQL로 개발하는것이 좋을 것 같고, 배치작업을 수행할 때는 STATIC SQL로 개발하시는것이 좋은 것 같습니다.
여러분들은 어떻게 생각하시나요?
ps. 글 보시다가 궁금하거나 이상한 점 있으시면 리플 달아주시기 바랍니다.
blog : http://blog.naver.com/xsoft