SQLJ의 정적 SQL문이 SQLJ절에 표시됩니다. SQLJ절은 #sql 토큰으로 시작하여 세미콜론으로 종료되므로 SQLJ 변환 프로그램이 해당 절을 인식합니다.
가장 단순한 SQLJ절은 #sql 토큰 다음에 SQL문이 중괄호 안에 들어 있는 실행 가능 절입니다. 예를 들어, 다음 SQLJ절은 Java 문이 올바르게 표시될 수 있는 모든 위치에 표시될 수 있습니다. SQLJ절의 용도는 다음과 같이 MYTABLE 테이블의 모든 행을 삭제하는 것입니다.
#sql { DELETE FROM MYTABLE };
Embedded SQL문의 인수는 SQL문에 표시되는 Java 변수인 호스트 변수를 통해 전달됩니다. 호스트 변수에는 다음과 같이 최대 세 파트가 있습니다.
Java ID는 SQLJ절을 바꾸기 위해 생성된 Java 코드에 여러 번 표시될 수 있습니다.
다음 쿼리에는 쿼리를 포함하는 범위에서 표시 가능한 Java 변수, 필드 또는 매개변수 x인 호스트 변수 :x가 포함됩니다.
SELECT COL1, COL2 FROM TABLE1 WHERE COL3 < :x
디폴트로 복합 SQL에 지정된 모든 호스트 변수는 입력 호스트 변수입니다. 호스트 변수를 출력 호스트 변수로 표시하도록 해당 변수 앞에 매개변수 모드 ID인 OUT 또는 INOUT을 지정해야 합니다. 예를 들어, 다음과 같습니다.
#sql {begin compound atomic static select count(*) into :OUT count1 from employee; end compound}
SQLJ 실행 가능 절에서 중괄호 안에 표시되는 토큰은 호스트 변수를 제외하고는 Java 변수에 대응하는 호스트 변수입니다. 호스트 변수 앞에는 콜론 문자(:)가 와야 합니다. SQL 토큰은 SQLJ 실행 가능 절의 중괄호 외부에 올 수 없습니다.
예를 들어, 다음 Java 메소드가 해당 인수 값을 SQL 테이블에 삽입합니다. 메소드 본문은 호스트 변수 x, y 및 z를 포함하는 SQLJ 실행 가능 절로 구성됩니다.
void m (int x, String y, float z) throws SQLException { #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) }; }
루프에 정적 SQL문을 초기화하지 마십시오. 각 정적 SQL문에 하나의 명령문이 있어야 합니다. 예를 들어, 다음 코드 스니펫은 올바르지 않습니다.
for( int i=0; i<2; i++ ){ #sql [ctx] itr[i] = { SELECT id, name FROM staff }; }
위의 코드 스니펫을 다음 명령문으로 바꾸십시오.
int i=0; #sql [ctx] itr[i] = { SELECT id, name FROM staff }; i=1; #sql [ctx] itr[i] = { SELECT id, name FROM staff };
일반적으로 SQL 토큰은 대소문자를 구분하지 않으며(큰따옴표로 구분되는 ID 제외) 대문자, 소문자 또는 대소문자를 혼합하여 작성할 수 있습니다. 그러나 Java 토큰은 대소문자를 구분합니다. SQLJ 도움말 항목의 예제에서는 명확성을 위해 대소문자를 구분하지 않는 SQL 토큰은 대문자로 Java 토큰은 소문자 또는 대소문자 혼합으로 작성되어 있습니다. 소문자 null은 Java 널(null) 값을 표시하는데 사용되며, 대문자 NULL은 SQL 널(null) 값을 표시하기 위해 사용됩니다.