Problemet er, at du prøver at hente en commit.
Når du åbner My_Data_Cur
med til opdatering
klausul, skal Oracle låse hver række i My_Data_1
tabel, før den kan returnere nogen rækker. Når du forpligter
, Oracle skal frigive alle disse låse (de låse Oracle opretter spænder ikke over transaktioner). Da markøren ikke længere har de låse, du har anmodet om, er Oracle nødt til at lukke markøren, da den ikke længere kan opfylde
Den mest logiske tilgang ville næsten altid være at fjerne commit
og gør det hele i en enkelt transaktion. Hvis du virkelig, virkelig, virkelig har brug for separate transaktioner, skal du åbne og lukke markøren for hver iteration af løkken. Mest sandsynligt vil du gerne gøre noget for at begrænse markøren til kun at returnere 100 rækker hver gang den åbnes (dvs. et rownum <=100
klausul), så du ikke pådrager dig udgifterne til at besøge hver række for at placere låsen og derefter hver række andre end de 100, som du behandlede og slettede for at frigive låsen hver gang gennem løkken.