打開游標 Oracle連著打開兩次游標,只關(guān)閉一次有問題嗎?
Oracle連著打開兩次游標,只關(guān)閉一次有問題嗎?您好,對于同一個游標,在第一次打開后,將打開一個緩存,將記錄集讀取到緩存中,然后取到下一個周期。然后再次打開。此時,緩存將被清除,新記錄集將再次讀取到
Oracle連著打開兩次游標,只關(guān)閉一次有問題嗎?
您好,對于同一個游標,在第一次打開后,將打開一個緩存,將記錄集讀取到緩存中,然后取到下一個周期。
然后再次打開。此時,緩存將被清除,新記錄集將再次讀取到緩存中。循環(huán)完成后,釋放游標close,即緩存第一次打開。所以可以將光標放在結(jié)束處。相反,它將節(jié)省大量的關(guān)閉時間。為了保險起見,可以這樣寫:如果cursor2%打開然后關(guān)閉cursor2結(jié)束如果程序的其他部分不確定,也可以按上述形式處理。
plsql中如果我定義一個游標,然后打開這個游標,然后loop循環(huán)把查詢出來的數(shù)據(jù)全部插入自己定義的表中?
這不會浪費太多時間。所需時間分為兩部分。
1. 定義游標以獲取結(jié)果集。---這一時間主要取決于SQL查詢需要多長時間。
2. 循環(huán)。----這是跑步時間。但是,建議不要使用游標來處理大量數(shù)據(jù)。游標處理速度很慢。效率相對較低。最好做批處理。我以前用光標處理數(shù)據(jù)。我的商業(yè)邏輯很復(fù)雜。我每小時只能處理幾十萬個數(shù)據(jù)。效率太低了。后來,我改為多步驟,使用insert into select。。它的書寫速度快了一百八十倍。
ORA-01000:超出打開游標的最大數(shù)如何處理?
此錯誤的原因是resultset或語句未及時關(guān)閉。當您測試JMeter時,您不必打開它,因為Cursors降到了3,但是當資源正常關(guān)閉時,它仍然可以正常運行。
要解決這個問題,我們可以使用V$openuucursorview查看哪個SQL有問題,從而找到問題點。
SELECTSID,USERuname,SQLutextfromv$OPENucursor
執(zhí)行上述語句以查看哪些會話打開了光標。
此外,由于ora-01000錯誤,主要是多循環(huán)處理中出現(xiàn)的問題。您可以使用以下SQL來查看已發(fā)布多次的SQL]SQL>SELECTOC.SID文件, 原用戶姓名ST.SQL文本成本數(shù)字游標
2
FROMV$SQLST
3
INNERJOIN(
4
SELECTSID,USERuu NAME,ADDRESS,HASHu VALUE,COUNT(*)NUMu游標
5
FROMV$OPENuu游標
6
GROUPBYSID,USERu姓名,地址,哈希值
7
HAVINGCOUNT(*)>1
8
)OC
9ONOC.ADDRESS=ST。地址
10ANDOC.HASH值=圣哈希值
11ORDERBYOC.SID
If num_u2;游標的數(shù)量非常大,這表示SQL在釋放時不是正常關(guān)閉的,以便找到問題。