跳轉到內容

SQL\400/靜態嵌入式 SQL

來自華夏公益教科書,開放的書籍,開放的世界

靜態嵌入式 SQL

[編輯 | 編輯原始碼]

靜態嵌入式 SQL 語句被寫入高階語言程式的原始碼中,然後 SQL 預編譯器將 SQL 語句轉換為高階語言編譯器可以接受的格式。

動態 SQL 語句是在程式執行時編制、準備和執行的。

SQL 嵌入 RPG

[編輯 | 編輯原始碼]

SQL 語句可以放在 RPG 程式的計算中...詳細計算、總計計算或 RPG 子程式。RPG 使用位置 6 的字元(用 C 表示計算)來識別程式的哪個部分。以下是 SQL 語句通常在 RPG 程式計算中嵌入的方式。

 C/EXEC SQL
 C+ SQL Statement
 C+ SQL Statement
 C+ SQL Statement...
 C/END-EXEC

可以有任意數量的 SQL 語句。請注意第一行和最後一行開頭的斜槓,它們界定了嵌入在 RPG 程式碼中的 SQL 語句的開始和結束。請注意每個 SQL 語句開頭的加號。

傳統的 RPG 使用在程式程式碼的 F-spec 中指定的 檔案。SQL 語句可以包含可能未在程式程式碼的 F-spec 中指定的 檔案。

從 Release V5R4 開始,嵌入式 SQL 也可以用於 (RPG) 自由格式表示法。嵌入式 SQL 語句以 EXEC SQL 開頭,可以放在第 8 列和第 80 列之間的任何位置。SQL 語句可以緊接在 EXEC SQL 之後編碼,也可以從下一行開始。SQL 語句可以拆分成多行,但必須在第 8 列和第 80 列之間指定。自由格式中的嵌入式 SQL 語句以分號(;)結束,就像其他任何自由格式 RPG 語句一樣。

/Free
    Exec SQL  SQL Statement;
    Exec SQL  
      SQL Statement;
    Exec SQL  SQL Statement 1st Row
      SQL Statement 2nd Row
      ...
      SQL Statement nth Row;

示例

 /Free
    Exec SQL  Select Coalesce(Max(OrdPos) + 1, 1) into :NewPos
                 From OrderPosition
                 Where OrderNo = :ParOrderNo;

SQL 嵌入 Cobol

[編輯 | 編輯原始碼]

在 Cobol 中,SQL 語句嵌入在特定的程式部分。END-EXEC 必須以句號結束。

EXEC SQL
  SQL Statement
  SQL Statement
END-EXEC.

可以有任意數量的 SQL 語句。

靜態 SQL SELECT 模式

[編輯 | 編輯原始碼]

靜態 SQL 提供兩種操作模式,以及一些輔助選項。

  • 一次 SELECT 表中的一行。
  • 將一個或多個表的 SELECT 多行放入遊標中。
    • 串行遊標是指,每次開啟遊標時,結果集中的每一行只被獲取一次,並按順序遍歷資料。每次將一行資料讀入程式時,遊標將移動到結果集中的下一行。重複此過程,直到到達資料結束,此時應關閉遊標。要再次使用遊標,請關閉當前使用,然後重新發出開啟語句。我們無法在串行遊標中回退。
    • 滾動遊標支援按順序遍歷資料以外的替代方法。訪問預設使用串行遊標方法,而 Fetch 語句可以定位遊標進行讀取。如果未指定滾動遊標是動態的,則訪問為只讀。這種型別的遊標通常用於程式中,以在終端使用者的螢幕上顯示資料庫的部分內容,然後終端使用者可以鍵入一些內容來瀏覽資料,從而導致滾動遊標定位到資料中的其他位置,以獲取使用者想要檢視的內容。
    • 動態滾動遊標允許更新訪問的行。

SQL 遊標

[編輯 | 編輯原始碼]

這可以透過多種方式進行程式設計。一種方法是定義一個數據結構,該資料結構定義了在每次執行多行時將被選中的所有資料元素。它讀取來自聯接檔案的資料,類似於在 RPG 或 Cobol 中從一個檔案中讀取記錄。

與許多其他 AS/400 程式語言不同,在這些語言中可以在需要的地方定義變數,例如在將使用它們的某些子程式的開頭,SQL/400 要求在程式原始碼中,在任何地方使用嵌入 SQL 的程式之前定義任何內容。因此,處理嵌入在另一個高階語言中的 SQL 遊標的順序是

  1. 宣告遊標
  2. 開啟遊標
  3. 使用 Select 獲取行
  4. 選擇性地刪除或更新
  5. 關閉遊標
華夏公益教科書