메뉴 건너뛰기

bysql.net

9. Static vs. Dynamic SQL

2010.07.04 05:43

balto 조회 수:18343

- 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 사용 문제가 아니고 바인드 변수를 사용해야 효율적이다.


번호 제목 글쓴이 날짜 조회 수
67 Front Page file 운영자 2010.05.17 154865
66 4. Prefetch file balto 2010.07.10 28434
65 5. 오라클 Lock file 휘휘 2010.06.07 26365
64 2. DB 버퍼 캐시 file 휘휘 2010.05.24 21916
63 3. SQL 트레이스 file balto 2010.06.06 21175
62 1. 기본 아키텍처 [1] file 휘휘 2010.05.23 19899
61 2. 트랜잭션 수준 읽기 일관성 file 휘휘 2010.06.07 19566
60 5. Undo file 토시리 2010.05.31 18648
59 11. Shared Pool file 실천하자 2010.05.31 18511
» 9. Static vs. Dynamic SQL [1] balto 2010.07.04 18343
57 4. Array Processing 활용 file 휘휘 2010.07.05 18238
56 1 장. 오라클 아키텍처 운영자 2010.05.20 17842
55 5. Fetch Call 최소화 file 휘휘 2010.07.05 16839
54 9. ASH(Active Session History) 실천하자 2010.06.14 15606
53 2. SQL 처리과정 file 휘휘 2010.06.28 15340
52 3. 버퍼 Lock [1] 휘휘 2010.05.24 15225
51 1. Explain Plan 실천하자 2010.06.06 14663
50 6. 바인드 변수의 부작용과 해법 file 실천하자 2010.06.28 14661
49 8. PL/SQL 함수 호출 부하 해소 방안 토시리 2010.07.11 14023
48 7. Result 캐시 휘휘 2010.07.19 12969