'Pro*C'에 해당되는 글 1건
- 2009.03.17 SQLJ란?
Sqlj란 무엇인가?
개발자들은 기존의 C언어를 이용해서 Oracle Database에 접근 하고자 할 때 두 가지 방식을 이용했다. 하나는 “Pro*C” 방식이고, 다른 하나는 “OCI Library”를 바로 call하는 방식이었다. 이 두 가지의 차이점은 “Pro*C”의 경우 Embedded Sql문을 이용하기 때문에 기존의 C문장에 다음과 같이 삽입함으로써 Oracle Database에서 데이터를 가공할 수 있었다.
EXEC SQL DELETE FROM dept WHERE deptno = :v_deptno
그러나 만약, OCI Library를 직접 call해서 위와 같은 내용을 수행하려면 low level의 coding이 필요한 데, 이와 비교해 볼 때 Java의 경우에는 전자와 같은 방식이 “sqlj”방식이고 후자와 같은 low level의 programming이 “JDBC API”를 이용하는 방식이라 할 수 있겠다.
Sqlj와 JDBC API를 이용 시 각 방식의 장단점이 있겠지만, 다음 표로 간단히 확인해 보자.
|
SQLJ |
JDBC API |
코딩의 양 |
간결하다. |
많은 line수 필요 |
sql문 syntax 검사 |
Pre-compile time시에 결정 |
runtime시에 결정 |
Host 변수 |
사용 가능 |
사용 불가능 |
Dynamic Sql이용 |
불가능 |
사용 가능 |
[표1 SQLJ와 JDBC API의 비교]
위에서 언급된 부분을 살펴보면 SQLJ가 JDBC API를 바로 이용하는 것보다 코딩 line수가 적으며, 이것은 몇 개의 column의 값을 update할 때 더 확실히 알 수 있다. SQLJ는 sql문을 pre-compile time시에 syntax나 objects의 존재 여부 type 검사 등을 위해서 미리 database에 접속을 한 후 검증을 한다. 그러므로, compile-time시에 에러를 발생시키고, runtime시에 에러를 줄임으로써, 개발자들로 하여금 빠르고 쉬운 debugging이 가능토록 한다.
또한, SQLJ는 “Host variables”을 이용할 수 있으므로, 문장이 상당히 간결해 질 수 있으나 JDBC API를 이용할 경우에는 그렇지 못하다. 그러나, SQLJ의 경우 compile시에 sql문이 완전히 조합되어 있어야 하므로, “dynamic sql”등을 사용할 수가 없다. 만약 dynamic sql을 이용하고자 한다면, “JDBC API”를 이용해서 Dynamic SQL을 구현해야 한다.
정리를 하면, “Static SQL”에 해당하는 부분은 SQLJ를 이용하는 것이 좋고, Dynamic SQL에 해당하는 부분은 “JDBC API”를 이용함으로써 개발 생산성과, rumtime시의 performance를 극대화할 수 있겠다.