하드 파싱 부하를 최소화하기 위해 Dynamic SQL 대신 Static SQL을 사용하라는 표현을 흔히 사용하는데,
일반적으로 Static SQL이란 바인드 변수를 사용한 SQL문이고, Dynamic SQL이란 바인드 변수를 사용하지 않은 SQL문이라고 알고 있다.
문제의 본질은 바인드 변수 사용 여부
Static, Dynamic SQL은 애플리케이션 개발 측면에서의 구분일 뿐이며, 데이터베이스 입장에서는 차이가 없다.
Static SQL를 사용하든 Dynamic SQL를 사용하든 오라클 입장에서는 던져진 SQL문 그 자체만 인식할 뿐이며,
애플리케이션 커서 캐싱 기능을 사용하지 않는다면 Dynamic, Static 구분은 라이브러리 캐시 효율과도 전혀 무관하다.
그러므로 라이브러리 캐시 효율을 논할 때 초점은 바인드 변수 사용 여부에 맞춰져야 한다.
Dynamic SQL을 사용해 문제가 되는 것이 아니라 바인드 변수를 사용하지 않았을 때 문제가 되는 것이다.
바인드 변수를 사용하지 않고 Literal 값을 SQL 문자열에 결합하는 방식으로 개발했을 때, 반복적인 하드파싱으로 성능이 얼마나 저하되는지,
그리고 그 때문에 라이브러리 캐시에 얼마나 심한 경합이 발생하는지, 바인드 변수 사용여부로 Static과 Dynamic을 구분하는 것은
잘못된 것이므로 용어 사용에 주의하자.