我試圖做一些事情,如:有沒有辦法重新啓動遊標?甲骨文
for(int i = 0; i<10; i++)
{
for(int j = 0; j<10; j++)
{
Blah;
}
}
//As you can see each time that there is a different i, j starts at 0 again.
在Oracle中使用遊標。但如果我是正確的,在從遊標獲取所有行後,它將不會重新啓動。有沒有辦法做到這一點?
這裏是我的SQL:
CREATE OR REPLACE PROCEDURE SSACHDEV.SyncTeleappWithClientinfo
as
teleCase NUMBER;
CURSOR TeleAppCursor
is
Select
distinct(casenbr)
from TeleApp;
CURSOR ClientInfoCursor
is
Select casenbr
from clientinfo
where trim(cashwithappyn) is null;
BEGIN
open TeleAppCursor;
open ClientInfoCursor;
LOOP
fetch TeleAppCursor into teleCase;
EXIT when TeleAppCursor%NOTFOUND;
LOOP
fetch ClientInfoCursor into clientCase;
EXIT when ClientInfoCursor%NOTFOUND;
if clientCase = teleCase then
update ClientInfo
set cashwithappyn = (select cashwithappyn from teleapp where casenbr = clientCase)
where casenbr = clientCase;
break;
end if;
END LOOP;
END LOOP;
END;
我沒有在網上查,是無法找到這樣的東西。
首先,爲什麼「重新啓動」對你意味着什麼,你爲什麼需要「重新啓動」?您發佈的您想要完成的僞代碼似乎不需要重新啓動。其次,你爲什麼要在PL/SQL中編寫嵌套循環? SQL是一種基於集合的語言 - 編寫單個UPDATE語句會更有效率(更不用說更少的代碼),它可以更新要更新的每一行,而不是編寫兩個循環,併發布大量的' UPDATE'語句每個只更新一行。 –
通過重新啓動我的意思是再次開始在結果表的頂部。 只有當caseNumber相同時,並且僅當第二張表cashwithappyn爲空時,我需要將第一張表的數據(cashwithappyn)輸入到第二張表中。 – Solid1Snake1
我想,關閉光標,然後重新打開它會重新啓動光標。但是,我仍然同意Justin的觀點,你爲什麼想要在代碼中做所有的事情?它可以以更簡單的方式完成。 – Annjawn