SQLJ 陳述式可以與 SQLJ 檔案中的 Java™ 陳述式混用。
SQLJ 中的靜態 SQL 陳述式出現在 SQLJ 子句中。SQLJ 轉換器可以辨識 SQLJ 子句, 因為它們的開頭為記號 #sql,結尾為分號。
最簡單的 SQLJ 子句是由記號 #sql 加上其後用大括號括住的 SQL 陳述式組成的可執行子句。例如, 下列 SQLJ 子句可以出現在 Java 陳述式合法地可以出現的任何地方。 SQLJ 子句的用途是在刪除表格 MYTABLE 中的所有列:
#sql { DELETE FROM MYTABLE };
內嵌 SQL 陳述式的引數是透過主變數傳遞, 這些變數是出現在 SQL 陳述式中的 Java 變數。主變數最多有三個部分:
Java ID 可以在為取代 SQLJ 子句而產生的 Java 程式碼中出現多次。
下列查詢包含主變數 :x, 此主變數是在包含下列查詢的範圍中可見的 Java 變數、 欄位或參數 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 可執行子句中,出現在大括號內的記號都是 SQL 記號, 但是主變數除外,其對應於 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 則代表 SQL 空值。