SQLJ 陳述式語法

SQLJ 陳述式可以與 SQLJ 檔案中的 Java™ 陳述式混用。

Java 中的內嵌 SQL 陳述式

SQLJ 中的靜態 SQL 陳述式出現在 SQLJ 子句中。SQLJ 轉換器可以辨識 SQLJ 子句, 因為它們的開頭為記號 #sql,結尾為分號。

最簡單的 SQLJ 子句是由記號 #sql 加上其後用大括號括住的 SQL 陳述式組成的可執行子句。例如, 下列 SQLJ 子句可以出現在 Java 陳述式合法地可以出現的任何地方。 SQLJ 子句的用途是在刪除表格 MYTABLE 中的所有列:

   #sql { DELETE FROM MYTABLE };

Java 中的主變數

內嵌 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}

SQL 記號

在 SQLJ 可執行子句中,出現在大括號內的記號都是 SQL 記號, 但是主變數除外,其對應於 Java 變數。主變數前面必須有冒號字元 (:)。SQL 記號不會在 SQLJ 可執行子句的大括號外出現。

例如,下列 Java 方法會將其引數的值插入 SQL 表格。方法主體由包含主變數 xyz 的 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 空值。

相關工作
建立 SQLJ 檔案
將 SQLJ 支援新增至 Java 專案
從 Java 專案中移除 SQLJ 支援
讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.