정적 SQL문이 참조하는 데이터베이스 오브젝트에 영향을 주는 SQL DDL문

DDL(Data Definition Language)문이 DML(Data Manipulation Language)문이 참조하는 DBMS 오브젝트를 작성, 삭제(drop) 또는 변경하는 경우 SQL DDL문은 정적으로 실행되는 DML문에 대한 문제점의 원인이 될 수 있습니다. 문제점은 DDL 및 DML문이 바인드된 후 DDL문이 한 번만 실행되는 경우에도 발생할 수 있습니다.

DDL문은 실행될 때 DDL문이 작성, 변경 또는 삭제(drop)하는 오브젝트를 참조하는 모든 정적 SQL DML문의 액세스 플랜을 무효화합니다. 액세스 플랜이 무효화되어도 DML문은 계속 실행될 수 있습니다. DML문 실행은 경고 또는 오류 메시지를 생성하지 않습니다.

액세스 플랜이 무효화되는 경우 두 가지 결과가 가능합니다.

두 경우 모두에서 pureQuery가 아닌 API 애플리케이션은 정적 SQL의 기본 이점 중 두 가지(액세스 경로가 변경되지 않는 것과 가능한 성능 이점)를 상실합니다.

IBM®은 클라이언트 최적화에 사용하는 애플리케이션에서 DDL문을 실행하지 않도록 권장합니다.

애플리케이션이 바인드된 DDL문을 사용하고 executionMode 값이 STATIC인 경우, pureQuery는 DDL문을 실행합니다.

또한 애플리케이션이 바인드되지 않은 DDL문을 사용하고 executionMode 값이 STATIC이며 allowDynamicSQL 값이 TRUE인 경우, pureQuery는 DDL문을 실행합니다. 그러나 애플리케이션이 바인드되지 않은 DDL문을 사용하고 executionMode 값이 STATIC이지만 allowDynamicSQL 값이 FALSE인 경우 pureQuery는 DDL문을 실행하지만 "정적 명령문을 찾을 수 없음" 예외가 발생합니다.


피드백