程式範例: 使用 Db2 for i 陳述式
以下範例應用程式顯示如何以 Db2® for i 支援的每一種語言來撰寫 SQL 陳述式的程式碼。
範例應用程式會根據佣金提供提高。
每一個範例程式都會產生相同的報告,其顯示在本主題的結尾。 報告的第一部分按專案顯示所有在專案中工作的員工收到加薪。 報告的第二部分顯示每一個專案的新薪資費用。
程式範例的注意事項
下列注意事項適用於所有範例程式:
- SQL 陳述式可以大寫或小寫輸入。
- 1
- 這個主語言陳述式會擷取 SQL 表格 PROJECT 的外部定義。 這些定義可以用作主變數或主結構。附註:
- 在 RPG/400®中,必須重新命名外部說明結構中長度超過 6 個字元的欄位名稱。
- REXX 不支援擷取外部定義。
- 2
- SQL INCLUDE SQLCA 陳述式是用來併入 PL/I、C 及 COBOL 程式的 SQLCA。 若為 RPG 程式, SQL 前置編譯器會自動將 SQLCA 資料結構置於「輸入規格」區段結尾的原始程式中。 對於 REXX , SQLCA 欄位是在個別變數中維護,而不是在 SQLCA 所對映的連續資料區中。
- 3
- This SQL WHENEVER statement defines the host language label to which control is passed if an SQLERROR (SQLCODE < 0) occurs in an SQL statement. 這個 EVENEVER SQLERROR 陳述式適用於所有下列 SQL 陳述式,直到遇到下一個 EVENEVER SQLERROR 陳述式為止。 REXX 不支援每當陳述式。 相反地, REXX 會使用 SIGN ON ERROR 機能。
- 4
- 此 SQL UPDATE 陳述式會更新 SALARY 直欄,其中包含依主變數 PERCENTAGE (PERCNT for RPG) 中百分比的員工薪資。 更新的列是員工佣金大於 2000 的列。 若為 REXX ,這是 PREPARE 及 EXECUTE ,因為如果有主變數,則無法直接執行 UPDATE。
- 5
- 此 SQL COMMIT 陳述式會確定 SQL UPDATE 陳述式所做的變更。 釋放所有已變更列上的記錄鎖定。附註: 已使用 COMMIT (*CHG) 前置編譯程式。 (對於 REXX , *CHG 是預設值。)
- 6
- 此 SQL DECLARE CURSOR 陳述式定義游標 C1,其結合兩個表格 EMPLOYEE 及 EMPPROJACT ,並針對收到加薪 (佣金> 2000) 的員工傳回列。 依專案號碼和員工編號 (PROJNO 和 EMPNO 直欄) 以遞增順序傳回列。 對於 REXX ,這是 PREPARE 和 DECLARE CURSOR ,因為如果 DECLARE CURSOR 陳述式具有主變數,則無法直接與陳述式字串一起指定。
- 7
- 此 SQL OPEN 陳述式會開啟游標 C1 ,以便可以提取列。
- 8
- 此 SQL WHEN 陳述式定義當提取所有列 (SQLCODE = 100) 時要傳遞控制項的主電腦語言標籤。 對於 REXX ,必須明確檢查 SQLCODE。
- 9
- 此 SQL FETCH 陳述式會傳回游標 C1 的所有直欄,並將傳回的值放入主機結構的對應元素中。
- 10
- 提取所有列之後,會將控制項傳遞至此標籤。 SQL CLOSE 陳述式會關閉游標 C1。
- 11
- 此 SQL DECLARE CURSOR 陳述式定義游標 C2,它會結合 EMPPROJACT、PROJECT 及 EMPLOYEE 這三個表格。 結果會依直欄 PROJNO 和 PROJNAME 分組。 COUNT 函數會傳回每個群組中的列數。 SUM 函數會計算每一個專案的新薪資成本。 ORDER BY 1 子句指定根據最終結果直欄 (EMPPROJACT.PROJNO)。 對於 REXX ,這是 PREPARE 和 DECLARE CURSOR ,因為如果 DECLARE CURSOR 陳述式具有主變數,則無法直接與陳述式字串一起指定。
- 12
- 此 SQL FETCH 陳述式會傳回游標 C2 的結果直欄,並將傳回的值放入程式所說明之主機結構的對應元素中。
- 13
- 不論 SQL ROLLBACK 陳述式上是否發生錯誤,此具有繼續選項的 SQL WEENHERN 陳述式會導致處理繼續下一個陳述式。 SQL ROLLBACK 陳述式沒有預期的錯誤; 不過,如果發生錯誤,則會防止程式進入迴圈。 REXX 不支援每當陳述式。 相反地, REXX 使用 SIGNAL OFF ERROR 機能。
- 14
- 如果在更新期間發生錯誤,則此 SQL ROLLBACK 陳述式會將表格還原至其原始狀況。