Dynamic SQL
태그 :
- 개념
- 프로그램 로직에 따라 Dynamic하게 SQL 구문을 String형 변수에 담아서 처리하는 방식
Dynamic SQL의 정의
- 프로그램 로직에 따라 Dynamic하게 SQL 구문을 String형 변수에 담아서 처리하는 방식
Static SQL과 Dynamic SQL의 비교
구현 방법의 비교
구분 |
구 현 |
설명 |
static |
-SQL문을 변수에 담지않고 코드상에 섞어서 기술 |
|
Dynamic |
||
String형 변수를 사용하므로 조건에 따라 SQL 구문을 동적으로 바꿀 수 있고, 런타임시에 사용자로부터 SQL 구문문의 일부 또는 전부를 입력 받아 실행 가능 Toad, Orange, SQL*PLUS와 같은 DBMS Tool에서 Dynamic SQL 사용 |
나. 사용방법의 비교
구분 |
Static SQL |
Dynamic SQL |
SQL 구성 |
SQL구문을 CURSOR 선언하여 정적 처리 |
SQL 구문을 String형 변수에 담아 동적 처리 |
개발 패턴 |
Static SQL 은 SQL 구문이 변경되지 않아야 하기 때문에 일반적인 개발 패턴은 Static SQL 을 CURSOR절에 선언한 뒤 이를 BEGIN END 절 사이에서 Looping 구조로 데이터 처리 |
Dynamic SQL 은 SQL 구문이 변경 가능하므로 NVL()처리 불필요. |
컬럼 구성 |
Static SQL 은 정적이기 때문에 컬럼 및 Where절 변경 불가 |
Dynamic SQL은 구문을 변수에 담아서 DBMS를 콜하기 때문에 변수나 칼럼등 모든 SQL을 로직으로 처리하여 자유롭게 SQL구문 사용 |
실행 계획 |
Optimizer는 NVL()처리가 되어있는 조건을 처리하기 위해 IS NULL, IS NOT NULL 로 나누어 실행계획 수립, 만약 6개 조건이 있다면 12개의 CONCATEMATION 으로 실행계획이 분할되어 실행 계획 수립을 위한 하드파싱 시간 장시간 소요 |
Optimizer 는 NVL()처리된 WHERE 조건이 없기 때문에 실행게획을 쪼깰 필요가 없고 그만큼 순수 액세스 패스에 대하여 실행계획을 수립하기 때문에 하드파싱 시간 최적화 |
장점 |
Dynamic에 비해 실행속도 우수 SQL문에 대하여 개발 시에 사전 검사가 가능 |
Application 내 각 SQL 구문에 대해 가장 최근 시점의 통계정보를 근거로 한 access plan 보유 SQL 구문은 개발시가 아닌, 실행시에 확정되므로, 보다 다양하고 유연한 application 개발이 가능 |
단점 |
개발 시에 SQL 구문 정의 Precompile, bind과정 필요
|
Static에 비해 처리속도 느림 실행전에 SQL 구문의 type, syntax, previlege checking이 불가능 |
다. 처리방식의 비교
STATIC | DYNAMIC |
3. Dynamic SQL의 한계
-Dynamic SQL이 static SQL 보다 개발 난이도가 높고, 개발시간도 현저히 증가
-Static SQL은 직관적 방식으로 Readability 양호하나, Dynamic SQL은 프로그램 로직으로 SQL을 구현하므로 Readability 결여
-고려사항 : 성능과 유연성에 대하여 Static SQL과의 Trade-off 고려