找到 150 篇文章 適用於 DB2

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

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”子句宣告遊標。在這種情況下,主機變數應宣告為陣列。因此,在單個提取語句中,主機變數陣列將填充多個行資料。我們可以遍歷主機變數陣列以訪問此行資料。例如,我們可以如下宣告多行提取遊標: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 錯誤程式碼表示: “FETCH 或 CLOSE 語句中識別的遊標已開啟”... 閱讀更多

是否可以在我們對 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

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

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.