2011-04-01 1 views
2

oracle alter session 쿼리를 실행하여 언어 설정을 변경하려고 시도했지만 "ORA-01036 : 잘못된 변수 이름/번호"오류와 함께 실패합니다.oracle의 Java prepared statement 매개 변수가 세션 변경 쿼리

preparedStatement = connection.prepareStatement("ALTER SESSION SET NLS_SORT = ?"); 

preparedStatement.setString(1, "BINARY_CI"); 

preparedStatement.execute(); 

오라클은 ddl 문에서 변수를 바인드 할 수 없습니다. 바인드 변수는 성능상의 이득을 가지므로 (이 경우에는 웹 응용 프로그램에서 사용되는 모든 연결에서이 변경 세션 쿼리가 실행됩니다) SQL 응용 프로그램에서 응용 프로그램을 사용하지 못하게하고 싶습니다. 바인드 변수가 아닌 경우 위의 alter session 쿼리를 실행하는 다른 최적화 된 방법이 있습니까?

답변

3

쿼리 구문 분석/최적화는 각 실행마다 한 번만 수행되기 때문에 바인딩 변수의 성능이 향상됩니다.

alter session 호출에서 구문 분석이 수행되지 않습니다. 여기서 바인드 변수를 사용하면 성능 측면에서 어떤 이점도 얻을 수 없습니다.

SQL 삽입의 경우, 지원하는 데이터 정렬 목록에 대한 데이터 정렬 이름의 유효성을 검사하면됩니다.

1

ALTER SESSION 쿼리 계획 (빌드가 느림)이 필요하지 않으므로 준비가되지 않았더라도 빨리 수행해야합니다.

연결 풀링을 사용하는 경우 (아마도 그렇게 할 것입니다)이 문은 더 자주 실행해야합니다.

하드 코드 된 리터럴 형식을 사용하거나 데이터 정렬 이름을 알려진 데이터 정렬 목록과 비교하여 확인하십시오.