找到關於 DB2 的150 篇文章

在多行提取的情況下,主機變數的用法是什麼?

Mandalika
更新於 2020年9月15日 10:55:55

199 次檢視

對於多行提取,主機變數需要宣告為陣列。此外,我們需要在工作儲存區定義另一個變數,其配置為 S9(4) COMP,它將儲存單次提取呼叫中要提取的行數的值。我們可以為此變數命名,這裡我們使用 MAX-ROW。以下是宣告主機變數陣列和 MAX-ROW 的示例。01 ORDER-ID PIC X(25) OCCURS 25 TIMES. 01 MAX-ROW PIC S9(4) COMP VALUE 25.我們將如下所示提取遊標。EXEC SQL    FETCH NEXT ROWSET FROM ORDER_CUR FOR ... 閱讀更多

如何使用單個 FETCH 呼叫從 DB2 表中提取多行?

Mandalika
更新於 2020年9月15日 10:51:31

903 次檢視

我們可以使用多行提取的概念,使用單個 FETCH 呼叫從 DB2 表中提取多行。在多行提取中,我們必須使用“WITH ROWSET POSITIONING”子句宣告遊標。在這種情況下,主機變數應宣告為陣列。因此,在單個 fetch 語句中,主機變數陣列將填充多個行資料。我們可以遍歷主機變數陣列以訪問此行資料。例如,我們可以宣告一個多行提取遊標,如下所示:EXEC SQL    DECLARE ORDER_CUR WITH ROWSET POSITIONING FOR   ... 閱讀更多

如何從未開啟的遊標中提取資料或開啟已開啟的遊標?

Mandalika
更新於 2020年9月15日 10:49:03

130 次檢視

當我們嘗試從未開啟的遊標中提取資料時,查詢將失敗。在這種情況下,SQLCA 的 SQLCODE 欄位將填充 DB2 錯誤程式碼 -501。根據 IBM 文件,-501 錯誤程式碼指出: “在 FETCH 或 CLOSE 語句中標識的遊標未開啟” 當我們嘗試開啟已開啟的遊標時,查詢將失敗,並且我們將在 SQLCA 的 SQLCODE 欄位中獲得錯誤程式碼 -502。根據 IBM 文件,-502 錯誤程式碼指出: “在… 閱讀更多

是否可以在我們對 2 個表 ORDERS 和 TRANSACTIONS 使用 JOIN 的遊標中進行更新?為什麼或為什麼不?我們如何繼續更新這些表中的任何一個?

Mandalika
更新於 2020年9月15日 10:47:15

62 次檢視

當我們在遊標宣告中使用一個(自連線)或多個表上的 JOIN 時,將建立一個只讀遊標。我們無法更新只讀遊標。如果我們想要更新 JOIN 中使用的任何表,則必須為所有表宣告單獨的遊標,並且必須構建單獨的邏輯來更新每個 DB2 表。

在 COBOL-DB2 程式中,如何在發出 COMMIT 後保持遊標開啟?

Mandalika
更新於 2020年9月15日 10:45:44

2K+ 次檢視

每當我們發出 COMMIT 語句時,所有開啟的遊標都將關閉。當我們在使用遊標時必須在 UPDATE 後頻繁使用 commit 語句時,這是一個非常常見的情況。在這種情況下,我們可以在遊標宣告期間使用“WITH HOLD”子句。“WITH HOLD”子句即使在發出 COMMIT 語句後也會保持遊標開啟。我們可以如下所示給出“WITH HOLD”子句。EXEC SQL       DECLARE ORDER_CUR CURSOR WITH HOLD FOR          SELECT ORDER_ID, TRANSACTION_ID FROM ORDERS             WHERE ORDER_DATE = ‘2020-07-28’ END-EXEC

在 COBOL-DB2 程式中,“WHERE CURRENT OF” 子句的用途和用法是什麼?

Mandalika
更新於 2020年9月15日 10:42:45

5K+ 次檢視

“WHERE CURRENT OF” 子句將在執行 UPDATE 語句後對行放置獨佔鎖。“WHERE CURRENT OF” 子句將指向遊標最近提取的行。我們可以使用“WHERE CURRENT OF”如下所示更新遊標中的行。遊標定義。EXEC SQL DECLARE ORDER_CUR CURSOR FOR SELECT ORDER_ID, TRANSACTION_ID FROM ORDERS WHERE ORDER_DATE = ‘2020-07-28’ END-EXEC開啟遊標EXEC SQL OPEN ORDER_CUR END-EXEC提取遊標並更新行SET WF-END-CURSOR-N TO TRUE    PERFORM UNTIL WF-END-CURSOR-Y    EXEC SQL    FETCH ORDER_CUR INTO :ORDER-ID, :TRANSACTION-ID END-EXEC IF TRANSACTION-ID NOT = SPACES    EXEC SQL   ... 閱讀更多

遊標中“FOR UPDATE OF”子句的目的是什麼?如果我們在 COBOL-DB2 程式中不使用此子句就發出 UPDATE 語句,將會發生什麼?

Mandalika
更新於 2020年9月15日 10:35:09

694 次檢視

“FOR UPDATE OF” 子句在遊標宣告中給出,當我們想要更新表時使用。所有需要更新的列都應該在遊標宣告中給出。“FOR UPDATE OF” 子句將在遊標開啟後對所有符合條件的行放置獨佔鎖。我們也可以在不使用“FOR UPDATE CLAUSE”的情況下更新表,但在這種情況下,只有在執行 UPDATE 查詢時才會對行放置獨佔鎖。

如何在 COBOL-DB2 程式中檢測遊標行結束的條件?

Mandalika
更新於 2020年9月14日 15:28:00

1K+ 次檢視

遊標可用於從 DB2 表中提取多行。但是,我們必須在迴圈中提取此遊標,以便一次將對應於單行的值分配給主機變數。基於此邏輯,我們必須處理我們的迴圈,直到遊標到達最後一行結果。當遊標中沒有更多行可提取時,SQLCODE 欄位的值為 100。實際上,我們可以透過以下方式實現這一點。SET WF-END-CURSOR-N TO TRUE PERFORM UNTIL WF-END-CURSOR-Y    EXEC SQL       FETCH ORDER_CUR ... 閱讀更多

在任何 COBOL-DB2 程式中使用遊標涉及哪些步驟?

Mandalika
更新於 2020年9月14日 15:22:57

7K+ 次檢視

當我們必須從表中提取多行時,使用遊標。在 COBOL-DB2 程式中使用遊標涉及 4 個步驟。宣告遊標 - 在此步驟中,我們將定義遊標的佈局。我們將給出我們想要使用的查詢。例如:EXEC SQL DECLARE ORDER_CUR CURSOR FOR SELECT ORDER_ID FROM ORDERS WHERE ORDER_DATE = ‘2020-07-28’ END-EXEC開啟遊標 - 接下來我們將開啟遊標。此語句準備好遊標進行資料檢索。例如:EXEC SQL OPEN ORDER_CUR END-EXEC提取遊標 - 在此語句中,我們開始從 DB2 提取資料,並且… 閱讀更多

解釋應該在獨立 SELECT 語句上使用遊標的場景?

Mandalika
更新於 2020年9月14日 15:13:40

61 次檢視

當我們在 WHERE 子句中使用主鍵或備用鍵時,通常使用獨立的 SELECT 語句。因此,在這種情況下,我們確定獨立的 select 語句只會返回一行,因為主鍵不能具有重複值(多行)。如果我們想要使用非唯一鍵查詢資料庫,這可能會從 DB2 表中返回多行,則必須使用遊標來處理返回的多行。我們可以迴圈訪問遊標以逐行讀取資料。例如,如果我們想要… 閱讀更多

廣告
© . All rights reserved.