System i 資料庫常見問題集

若要找出 DB2® for i 和「結構化查詢語言 (SQL)」問題的解答,請查閱此資料庫的常見問題集。

DB2 for i 基本概念

  1. 何謂 DB2 for i
  2. DB2 for i 是 DB2 系列的一部份嗎?
  3. DB2 for i 跟其他 DB2 產品的關係為何?
  4. 我的 DB2 for i 層次為何?
  5. 系統有提供任何範例資料庫?
  6. 如何安裝 DB2 for i
  7. 如何授權使用者使用 DB2 for i
  8. 如何管理 DB2 for i
  9. 是否可以將自己的長名稱和短名稱指定給表格和直欄?

i5/OS 資訊中心」的資料庫資源

  1. 何處有 DB2 手冊?
  2. 列印 PDF 有困難,怎麼辦?
  3. 有什麼其他資源可以協助我使用資訊中心?

資料共用和資料庫移轉

  1. 如何在 DB2 與其他系統之間移動資料?
  2. 如何將現有的資料庫移轉到 DB2 for i
  3. 可以在 DB2 for i 中儲存 XML 資料嗎?
  4. 可以從 System i® 平台連接到非 System i 平台上的 DB2 資料庫嗎?

IBM i 的查詢

  1. 如何找出所有存取特定檔案的查詢?
  2. IBM® 有提供任何系統的圖形查詢介面嗎?

SQL 型查詢

  1. 如何結合相同表格的兩個成員?
  2. 如何執行文字檔的 SQL 陳述式?
  3. 如何撰寫列出一組明細記錄,且底端列出總計的 SQL 查詢?
  4. 如何在數字或字元欄位中根據目前日期來選取橫列?
  5. 為何在升級至較新版次的 IBM i 作業系統之後,查詢的執行變慢?
  6. 可以在系統上建立在另一個系統上的表格、概略表或實體檔案的別名嗎?
  7. 多成員資料庫檔案的第一個成員具有與此檔案相同的名稱時,它是您可以使用 SQL 存取的唯一檔案成員。如何使用 SQL 存取另一個成員?

SQL 訊息

  1. SQL 訊息何時顯示?
  2. SQL0901 訊息碼是什麼意思?
  3. 何處有 SQL 訊息與訊息碼的清單?

SQL 資料包

  1. 何謂 SQL 資料包?
  2. 使用 SQL 資料包有何優點?
  3. SQL 資料包儲存什麼資料?
  4. 如何得知 SQL 資料包有何陳述式?
  5. 如何得知 SQL 資料包是否正在使用中?

儲存程序

  1. 如何檢視儲存程序呼叫的結果集內容和輸出參數?
  2. 現有的 RPG 或 COBOL 程式可以當作儲存程序嗎?
  3. 我建立一個程序,其中包含參照使用者定義函數的 SQL 陳述式。我在呼叫程序之前,先執行 SET PATH 陳述式,就能找到函數。為何呼叫程序時,找不到函數呢?
  4. 如何知道儲存程序是否存在,如果存在的話, 是位於哪一個程式庫,以及儲存程序的屬性為何?

觸發程式

  1. 何謂觸發程式?
  2. 為何在升級 i5/OS® 作業系統之後,我的觸發程式失去作用?
  3. SQL 觸發程式是否可以存取觸發程式緩衝區?

DB2 for i 基本概念

  1. 何謂 DB2 for i

    DB2 for i 是關聯式資料庫管理程式, 其完全整合至 IBM System i 產品。 因為已經整合,所以容易使用與管理 DB2 for iDB2 for i 也提供許多適用於各種應用程式類型的功能,例如觸發程式、儲存程序,以及動態點陣索引。這些應用程式的範圍包括從傳統的主機型應用程式到針對商用智慧型應用程式的主從架構解決方案。

    由於作為 DB2 for i 的介面, IBM DB2 Query Manager and SQL Development Kit for i 授權程式新增互動式查詢和報表撰寫介面, 以及前置編譯器和工具,協助您以高階程式設計語言撰寫 SQL 應用程式。IBM i 作業系統的 SQL 實作符合工業標準的 SQL,讓您可以定義、操作、查詢資料及控制資料的存取權限。並可與 i5/OS 檔案及 SQL 表格併用。

    返回問題集

  2. DB2 for i 是 DB2 系列的一部份嗎?

    是的。DB2 for i 是 DB2 系列的產品, DB2 系列的產品也包括 DB2 for z/OS® 以及 DB2 for Linux®, UNIX® and Windows®。

    返回問題集

  3. DB2 for i 跟其他 DB2 產品的關係如何?

    每一個 DB2 系列的產品有自己唯一的程式碼庫、函數和 SQL 語法。然而,整個 DB2 產品仍有技術共用。如需瞭解 DB2 產品之間的關係, 請參閱下列資訊:

    返回問題集

  4. 我的 DB2 for i 層次為何?

    如果您使用 System i 產品,即有 DB2 for iDB2 for i 的層次是基於 i5/OS 作業系統,且與 DB2 版本架構無關。因為 DB2 for i 隨附於 i5/OS 作業系統,所以 DB2 for i 的版本、版次及修正層次同於作業系統。這通常表示為 VxRyMz,其中 x 為版本,y 為版次, z 為修正層次。若您不知作業系統的版本、版次及修正層次,請遵循下列步驟:

    1. 從「System i 領航員」,以滑鼠右鍵按一下您的系統。
    2. 選取內容
    3. 按一下一般標籤 (若尚未選取)。

    返回問題集

  5. 系統是否提供任何範例資料庫?

    是的。 您可以在 SQL 程式設計主題集的 DB2 for i 範例表格中找到範例表格,以及系統提供用來建立這些表格的儲存程序。

    返回問題集

  6. 如何安裝 DB2 for i

    不需要安裝 DB2 for i。 它隨附於 i5/OS 作業系統版次。

    返回問題集

  7. 如何授權使用者存取 DB2 for i

    使用 SQL GRANT 和 REVOKE 陳述式,搭配 i5/OS 安全介面,可以控制 DB2 物件存取權限。 請參閱「資料庫」程式設計主題集的保護資料庫檔案安全主題。「System i 領航員」亦可用來授權使用者。如需詳細資訊,請參閱使用「System i 領航員」授權使用者或群組。

    返回問題集

  8. 如何管理 DB2 for i

    您可以使用 「System i 領航員」來管理 DB2 for i。在「System i 領航員」中有一項工具可以處理資料庫。您可以採用資料庫的傳統樹狀結構視圖,或採用資料庫物件的視覺化表示法,稱為資料庫領航員。如需使用「資料庫領航員」的詳細資訊, 請參閱對映您的資料庫

    返回問題集

  9. 我可否指定自己的長名稱和短名稱給表格和直欄?

    是的。如需相關指示,請參閱 Co-existing with "long" SQL table and column names資訊中心以外的鏈結

    返回問題集

i5/OS資訊中心」的資料庫資源

  1. 何處有 DB2 手冊?

    請遵循位於「資料庫」類別下方,資訊中心導覽樹狀結構中的 PDF 鏈結,即可找到資料庫手冊。

    返回問題集

  2. 列印 PDF 有困難,怎麼辦?
    建議在工作站儲存 PDF 檔案,用於檢視和列印。若要儲存 PDF,請遵循下列步驟:
    1. 在瀏覽器中以滑鼠右鍵按一下 PDF 鏈結。
    2. 按一下本端儲存 PDF 的選項。
    3. 瀏覽至您要儲存此 PDF 的目錄。
    4. 按一下儲存

    返回問題集

  3. 有什麼其他資源可以協助我使用資訊中心?

    請參閱資訊中心常見問題集。此常見問題集包含輕鬆使用資訊中心的要訣。

    返回問題集

資料共用和資料庫移轉

  1. 如何在 DB2 與其他系統之間移動資料?

    您可以使用 從匯入檔複製 (CPYFRMIMPF)複製到匯入檔 (CPYTOIMPF) 指令,在系統之間匯入 (載入) 或匯出 (卸載) 資料。如需指示,請參閱在系統之間匯入和匯出資料

    返回問題集

  2. 如何將現有的資料庫移轉到 DB2 for i

    IBM 提供數本手冊,可幫助您從其他資料庫(如 Oracle 及 SQL Server)將資料移動至 DB2 for i。如需這些指示,請參閱 DB2 for i Porting Information資訊中心以外的鏈結

    返回問題集

  3. 可以在 DB2 for i 中儲存 XML 資料嗎?

    是的。如需如何使用已提供的範例資料來設定資料庫、將 SQL 資料對映至 XML 文件、在資料庫中儲存 XML 文件,以及搜尋和取出 XML 文件資料的相關教學指導,請參閱 XML Extender Administration and ProgrammingPDF 鏈結 手冊。

    返回問題集

  4. 可以從 System i 平台連接到非 System i 平台上的 DB2 資料庫嗎?

    是的。您可以在 「分散式資料庫程式設計」主題集的使用者常見問題集中進一步瞭解。

    返回問題集

i5/OS 查詢

  1. 如何找出存取特定檔案的所有查詢?

    您可以遵循下列步驟來產生包含檔名之所有查詢的報告:

    1. 複製範例:尋找存取特定檔案的查詢中的程式碼, 將 &LIBRARY 和 &FILE 置換成您的程式庫和檔案名稱。
    2. 使用「建立指令 (CRTCMD)」指令來建立 FFINQ 指令。
    3. 指定 GETQRYPRM 作為要處理指令的程式。

    返回問題集

  2. IBM 有提供任何系統的圖形查詢介面嗎?

    是的。 提供給系統的圖形查詢介面軟體包含 DB2 Query Management Facility資訊中心以外的鏈結 以及 DB2 Web Query Tool資訊中心以外的鏈結

    返回問題集

SQL 為基礎的查詢

  1. 如何結合相同表格的兩個成員?

    若要結合相同表格的兩個成員,您可以為其中一個成員建立別名,再使用別名將兩者結合起來。 若要使用 SQL 來建立別名,請參閱建立和使用別名建立資料庫物件

    返回問題集

  2. 如何執行文字檔中的 SQL 陳述式?

    您可以使用執行 SQL 陳述式 (RUNSQLSTM) 指令,來執行文字檔中的 SQL 陳述式。 或者,您可以透過「System i 領航員」使用「執行 SQL Script」來執行 PC 或整合檔案系統中的文字檔。請參閱藉由執行 SQL script 查詢資料庫

    返回問題集

  3. 如何撰寫列出一組明細記錄,且底端列出總計的 SQL 查詢?
    您可以使用 UNION 作業,在項目清單底下附加一列總計,如下列範例所示:
    SELECT 'ITEM' AS ROWTYPE, PARTID, PRICE
        FROM PART
    UNION
    SELECT 'TOTAL' AS ROWTYPE, 0 AS PARTID, SUM( PRICE ) AS PRICE
        FROM PART
    ORDER BY ROWTYPE, PARTID

    為了確保總計列顯示在結果集尾端,您必須加入 Order By 子句。

    返回問題集

  4. 如何在數字或字元欄位中根據目前日期來選取列?

    SQL CurDate 函數會傳回日期值,此值無法直接與數字或未格式化字元值做比較。 比較之前必須做一些轉換動作。請使用 SQL 函數來取得日期的年、月、日整數,然後建立 YYYMMDD 格式的數字日期。 請參閱 範例:根據目前日期選取記錄 中的程式碼。

    返回問題集

  5. 為何在升級至較新版次的 i5/OS 作業系統之後,查詢的執行變慢?

    若最近從 V4R4 升級成較新的版次或版本,可能有一些查詢效能方面的問題。 請參閱 IBM DB2 UDB Query Performance Behavior Changes Since R440資訊中心以外的鏈結,取得可能的解決方案。

    返回問題集

  6. 可以在系統上建立另一個系統上的表格、概略表或實體檔案的別名嗎?

    不可以。為表格、概略表或實體檔案建立別名時,請確定它位於目前的系統上。如需相關資訊,請參閱 CREATE ALIAS 以取得一些語法範例。

    返回問題集

  7. 當多成員資料庫檔案的第一個成員具有與此檔案相同的名稱時, 它是您可以使用 SQL 存取的唯一檔案成員。如何使用 SQL 存取另一個成員?

    您可以建立別名, 指向您想存取的第一個成員。

    範例 2:在 SALES 表格的 JANUARY 成員上,建立名為 SALES_JANUARY 的別名。SALES 表格有 12 個成員 (一年的每一個月各一個成員)。
    CREATE ALIAS SALES_JANUARY
      FOR SALES(JANUARY)
    如需 SQL 參考主題集中的完整範例,請參閱 CREATE ALIAS

    返回問題集

SQL 訊息

  1. SQL 訊息何時顯示?

    DB2 for i 傳回錯誤碼到使用 SQL 的應用程式時,會顯示 SQL 訊息。在執行時期會顯示或記載訊息文字。

    返回問題集

  2. SQL0901 訊息是什麼意思?

    SQL0901:發生 SQL 系統錯誤。此為所有錯誤的一般訊息。如需 SQL0901 的相關資訊,請參閱 SQL 訊息與訊息碼

    返回問題集

  3. 何處有 SQL 訊息與訊息碼的清單?

    您可以在 SQL 訊息與訊息碼 中找到 SQL 訊息與訊息碼的完整清單。或者,也可以使用 SQL 訊息搜尋器

    應用程式亦可藉由在 CL 指令擷取訊息 (RTVMSG)傳送程式訊息 (SNDPGMMSG)傳送使用者訊息 (SNDUSRMSG) 中,指定訊息 ID 和替換文字,將對應於任何 SQLCODE 的 SQL 訊息傳送至工作日誌。

    返回問題集

SQL 資料包

  1. 何謂 SQL 資料包?

    SQL 資料包是永久物件,用來儲存準備的 SQL 陳述式相關的資訊。 當勾選資料來源的「延伸動態」方框時,「開放式資料庫連接 (ODBC)」就會用到 SQL 資料包。另外,使用 API 的應用程式也會用到。

    返回問題集

  2. 使用 SQL 資料包有何優點?

    因為 SQL 資料包為共用資源,只要備妥陳述式,資料包的所有使用者隨即就可以使用資訊。 如此可節省處理時間,尤其在許多使用者採用相同或類似陳述式的情況下,效果更明顯。 因為 SQL 資料包為永久的,所以在工作起始和結束期間,以及系統重新啟動之後,也都會儲存此資訊。 事實上,SQL 資料包可以在其他系統上儲存和還原。 經過比較,動態 SQL 就需要每一位使用者完成特定陳述式的預備處理,且使用者每次啟動應用程式時都必須執行一次。

    SQL 資料包亦可讓系統累積 SQL 陳述式的統計資訊,可以更適當地決定游標在內部開啟多久及如何妥善處理查詢所需的資料。 此資訊由使用者共用,且保留下來可以在未來使用。 以動態 SQL 而言,必須由每一項工作和每一位使用者收集此資訊。

    返回問題集

  3. SQL 資料包儲存什麼資料?

    SQL 資料包儲存著執行備妥陳述式的所有必要資訊。 包括陳述式名稱的登錄、陳述式文字、陳述式的內部剖析樹、陳述式涉及的所有表格和欄位的定義, 以及在執行時期存取表格所必備的查詢存取計劃。

    返回問題集

  4. 如何得知 SQL 資料包有何陳述式

    請使用「列印 SQL 資訊 (PRTSQLINF)」指令來產生格式化報告, 此報告顯示用於存取資料的 SQL 陳述式和存取計劃的相關資訊。

    返回問題集

  5. 如何得知 SQL 資料包是否被使用?
    請使用「列印 SQL 資訊 (PRTSQLINF)」指令來產生格式化報告, 此報告顯示用於存取資料的 SQL 陳述式和存取計劃的相關資訊。請利用資料庫監督程式來記載系統上關於 SQL 處理程序的相關資訊。 包括 SQL 摘要記錄裡的資料包名稱。 下列陳述式顯示資料包、SQL 作業及陳述式文字:
    SELECT qqc103, qqc21, qq1000 from <db monitor file>

    對於 ODBC,您亦可查看工作日誌中的延伸動態已停用訊息,判斷 ODBC 是否無法使用 SQL 資料包。

    返回問題集

如需其他 SQL 資料包常見問題集,請參閱 DB2 Universal Database™ for iSeries® Frequently Asked Questions: Improving Performance with SQL Packages資訊中心以外的鏈結 網站。

儲存程序

  1. 如何檢視儲存程序呼叫的結果集內容和輸出參數?

    使用「執行 SQL Script」來執行「System i 領航員」中的程序。首先,請開啟「執行 SQL Script」視窗。 然後,使用 CALL 陳述式來呼叫儲存程序,將參數傳給陳述式,並執行程序。 參數會傳回至「結果集」標籤,而輸出參數會傳回至「訊息」標籤。

    返回問題集

  2. 現有的 RPG 或 COBOL 程式可以當作儲存程序嗎?

    是的。DB2 for i 支援外部儲存程序,可以將現有的高階程式當作儲存程序來呼叫。CREATE PROCEDURE 陳述式可用來將這些程式登記為儲存程序。

    返回問題集

  3. 我建立一個程序,其中包含參照使用者定義函數的 SQL 陳述式。呼叫程序之前執行 SET PATH 陳述式,就能找到函數。 為何呼叫程序時,找不到函數呢?

    在執行 CREATE PROCEDURE 陳述式之前,必須執行 SET PATH 陳述式。 程式建立時,會同時定義前置編譯程式中的靜態陳述式路徑。 在 CREATE PROCEDURE 的案例中,建立一個 SQL C 程式。程序中的動態陳述式會使用現行路徑,但程序中的靜態陳述式則是使用建立時所使用的路徑。CREATE FUNCTION 陳述式亦然。

    返回問題集

  4. 如何知道儲存程序是否存在,如果存在的話, 是位於哪一個程式庫,以及儲存程序的屬性為何?
    若要在系統中查看儲存程序,您必須查詢 SYSPROCS 編目概略表。 例如︰
    SELECT * from sysprocs where routine_name = 'MYPROC' and routine_schema = 'MYLIB'
    這會檢查在 mylib 中是否有名為 myproc 的儲存程序。 如果您不知道應該用哪一個程式庫,請勿將搜尋條件的 routine_schema 部份併入查詢中。 如需 SYSPROCS 型錄中所有直欄的定義,請參閱 i5/OS 型錄表格及概略表。您可能也對 SYSPARMS 型錄感興趣,它包含程序的參數定義。

    返回問題集

觸發程式

  1. 何謂觸發程式?

    當在指定的表格或指定的實體資料庫檔案上,執行指定的變更或讀取作業時,自動執行的一組動作就稱為觸發程式。 如需詳細資訊,請參閱在資料庫中觸發自動事件

    從 V5R1 開始,您亦可使用 SQL 觸發程式。 當執行插入、更新或刪除動作時,SQL CREATE TRIGGER 陳述式讓資料庫管理系統可以積極地控制、監視及管理一組表格。每次執行 SQL 插入、更新或刪除動作時,就會自動執行 SQL 觸發程式內指定的陳述式。 SQL 觸發程式在執行時,可以呼叫儲存程序或使用者定義的函數來執行其他處理。 如需詳細資訊,請參閱 SQL 觸發程式

    返回問題集

  2. 為何升級 i5/OS 作業系統之後,我的觸發程式失去作用?

    可能是記錄的偏移已變更。在以往幾個版次中,偏移不會變更。但在 V5R1 裡已經變更,後續的版次裡也可能變更。撰寫觸發程式時一律使用傳入觸發程式緩衝區的偏移和長度,就是最簡單的解決方案。 如需觸發程式緩衝區中的欄位摘要,請參閱觸發程式緩衝區欄位說明

    返回問題集

  3. SQL 觸發程式是否可以存取觸發程式緩衝區?

    SQL 觸發程式的內文可以使用 REFERENCING NEW ROW 和 REFERENCING OLD ROW 子句,來參照儲存於觸發程式緩衝區中前後記錄映像檔中的欄位。然而,SQL 觸發程式無法直接參照觸發程式緩衝區, 也無法參照緩衝區中的其他資訊。例如,SQL 觸發程式無法使用觸發時間和觸發事件 。

    返回問題集