literal sql문제에 대해서-개발자 필독!!-그리고 반영하기 바람
literal sql문제에 대해서(concerned with BASE4)
안녕하세요.
오라클의 성시철입니다.
이번 BASE4의 진단결과 DATABASE내의 LITERAL SQL문제가 새롭게 제기 되었습니
다.
똑 같은 SQL의 경우 ORACLE은 PARSING을 다시 하지 않고 재사용을 하게 되는데
LITERAL SQL의 경우는 재사용이 되지 않고 다시 PARSING을 하게 되므로 DATABASE
에
부하를 주게 되는 것이지요.
가령 다음과 같은 QUERY가 있다면
select ename from emp where deptno=10;
select ename from emp where deptno=20;
oracle은 두개가 다른 sql문으로 생각하여 parsing을 두번합니다.
그러나
select ename from emp where deptno=:변수;
로 처리하고 프로그램내에서 변수를 처리하면 sql문이 parsing을 한번 합니다.
jdbc program중에 나타 날수있는 경우는 다음과 같습니다.
String query_String="select ename from emp where deptno="+dept_variable;
로 하여 executeQuery를 수행하면 이 문장은 database내에 계속에서 새로
parsing이 됩니다.
그러나
String query_String="select ename from emp where deptno=?";
으로 고쳐서 prepareStatement를 사용해서 setInt(deptno_variable)을 사용할경
우는
같은 sql로 간주하여 parsing을 하지 않습니다.
이상의 문제는 jdbc에서만의 문제가 아닙니다. plsql이던 sql*plus에서이든
forms에서든
database로 sql을 발생시키는 모든 프로그램에 관련 된 것입니다.
jdbc가 아닌 pl/lsq에 대한 내용에 대해서도 혹시 의문이 있으시면 제게
문의해 주십시요.
현재 base4에서 발생하는 문제의 원인이 e-biz의 문제 인지는 확실하지는 않습니
다만
현제 base4의 문제가 가장 중요한 issue로 제기되고 있는 상황이니 특별히 base4
를
사용하고 있고 사용할 계획이 있는 곳에서는 신경써서 수정을 해주십시요.
그리고 어차리 오라클 database에서는 모두 적용되는 문제이니 literal sql이 발
생되지 않는
방향으로 프로그램을 진행시켜 주십시요.