Learning
토픽 179 / 201·SQL 및 데이터베이스 객체

정적 SQL vs 동적 SQL (Static SQL vs Dynamic SQL)

정적 SQL vs 동적 SQL (Static SQL vs Dynamic SQL)

컴파일 시점에 SQL 문이 확정되어 사전 최적화되는 정적 SQL과, 실행 시점에 SQL 문이 동적으로 생성·실행되는 동적 SQL

정적 SQL (Static SQL)

  • Embedded SQL(Pro*C, SQLJ), 호스트 변수만 변경 가능
  • 컴파일 시 구문분석·최적화·실행계획 생성(Precompile)
  • 성능 우수(파싱 생략), 보안 강화(SQL 인젝션 원천 차단)
  • 한계: SQL 문 구조 변경 불가, 유연성 부족

동적 SQL (Dynamic SQL)

  • EXECUTE IMMEDIATE, PreparedStatement, sp_executesql
  • 실행 시점에 SQL 문자열 조합·파싱·최적화
  • 유연성(조건별 SQL 생성, 가변 테이블/컬럼), 범용 도구 개발에 적합
  • 위험: SQL 인젝션 취약(바인드 변수 미사용 시), 실행계획 재사용 어려움

비교

사용 가이드라인: 고정 질의→정적 SQL, 가변 조건→바인드 변수 활용 동적 SQL, DBMS_SQL/NDS 활용, 화이트리스트 검증

연관: SQL, 옵티마이저, 실행계획, 저장 프로시저, 보안(SQL 인젝션)