9. Static vs. Dynamic SQL
2010.07.04 05:43
- Static vs Dynamic SQL 문에 따라 하드파싱 횟수에 영향을 끼친다.
▣ Static SQL
- SQL 문을 string 형 변수에 담지 않고 코드에 직접 기술한 경우(Embedded SQL)
(예) *.pc 프로그램
EXEC SQL select * from emp where empno=:empno;
- *.pc 프로그램은 *.c 프로그램으로 precompile되고 다시 C 컴파일러로 compile된다.
- *.pc 프로그램내 SQL문에 오류가 있으면 컴파일타임에 오류를 발생한다.
- proc test.pc sqlcheck=syntax (문법만 체크)
- proc test.pc sqlcheck=full userid=scott/tiger (semantic도 체크, -> 테이블존재여부 등 점검)
▣ Dynamic SQL
- SQL 문을 string 형 변수에 담아 기술한 경우(Embedded SQL)
(예) *.pc 프로그램
char select_stmt [50] = "select * from emp where empno=:empno";
- *syntax, semantics 체크가 불가능하므로 precompiler가 처리하지 않는다.
- 스칼라서브쿼리, 분석함수, ANSI 조인문 등은 Static SQL 문으로는 오류가 발생하므로 Dynamic SQL 문을 사용하면 된다.
- Pro*C에서 제공하는 Dynamic SQL도 dynamic 정도에 따라 다음 4가지로 구분된다.
(1) 입력 호스트 변수없는 Non-query
(예) 'delete from emp where deptno=20'
(2) 입력 호스트 변수가 고정적인 Non-query
(예) 'delete from emp where deptno=:deptno'
(3) select-list 컬럼 개수와 입력 호스트 변수가 고정적인 query
(예) 'select deptno, max(sal) from emp group by deptno'
(예) 'select ename, empno from emp where deptno=:deptno'
(4) select-list 컬럼 개수와 입력 호스트 변수가 가변적인 query
(예) 'insert into emp (<unknown>) values (<unknown>)'
(예) 'select <unknown> from emp where deptno=:deptno'
▣ 일반적인 프로그램 언어에서 SQL 작성법
- Java, Delphi, Visual Basic 언어에서는 모두 string 변수에 SQL 문을 치환한다.
=> 이들 언어는 모두 Dynamic SQL 문이다.
- Toad, Orange, SQL*Plus에서의 ad-hoc SQL은 모두 Dynamic SQL 이다.
- Static SQL을 지원하는 개발 언어로는 PowerBuilder, PL/SQL, Pro*C, SQLJ가 있다.
▣ DBMS에서 SQL 처리
- Static SQL, Dynamic SQL은 응용 개발 측면에서의 구분이고 데이터베이스 입장에서는 차이가 없다 ?.
- PL/SQL, Pro*C에서 Static SQL일 경우 애플리케이션 커서 캐싱을 사용할 수 있다.
- 애플리케이션 커서 캐싱 기능을 사용하지 않는다면 Dynamic, Static 구분은 라이브러리 캐시 효율과 무관하다.
- 라이브러리 캐시 효율은 바인드 변수 사용 여부와 관계있다.
=> Dynamic SQL 사용 문제가 아니고 바인드 변수를 사용해야 효율적이다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
47 | 5. Fetch Call 최소화 | 휘휘 | 2010.07.05 | 16852 |
46 | 1. Call 통계 | 실천하자 | 2010.07.05 | 10447 |
45 | 4. Array Processing 활용 | 휘휘 | 2010.07.05 | 18252 |
44 | 11. Static SQL 구현을 위한 기법들 | 실천하자 | 2010.07.05 | 12086 |
43 | 10. Dynamic SQL 사용 기준 | balto | 2010.07.04 | 8643 |
» | 9. Static vs. Dynamic SQL [1] | balto | 2010.07.04 | 18350 |
41 | 8. 애플리케이션 커서 캐싱 | 토시리 | 2010.06.29 | 6612 |
40 | 7. 세션 커서 캐싱 | 토시리 | 2010.06.29 | 10620 |
39 | 6. 바인드 변수의 부작용과 해법 | 실천하자 | 2010.06.28 | 14680 |
38 | 5. 바인드 변수의 중요성 | 실천하자 | 2010.06.28 | 11768 |
37 | 4장. 라이브러리 캐시 최적화 원리 | 휘휘 | 2010.06.28 | 6915 |
36 | 2. SQL 처리과정 | 휘휘 | 2010.06.28 | 15742 |
35 | 1. SQL과 옵티마이저 | 휘휘 | 2010.06.28 | 7218 |
34 | 4. 커서 공유 | balto | 2010.06.28 | 9201 |
33 | 3. 라이브러리 캐시 구조 | balto | 2010.06.28 | 9850 |
32 | 6. V$SYSTEM_EVENT | 토시리 | 2010.06.14 | 6523 |
31 | 10. V$SQL | 실천하자 | 2010.06.14 | 12684 |
30 | 5. V$SYSSTAT [1] | 토시리 | 2010.06.14 | 9851 |
29 | 12. 데이터베이스 성능 고도화 정석 해법 | 휘휘 | 2010.06.14 | 7153 |
28 | 11. End-To-End 성능관리 | 휘휘 | 2010.06.14 | 8095 |
다이나믹 SQL
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Database/Book/ProcPrograming/8.Dynamic_SQL