sql >> Database teknologi >  >> RDS >> Oracle

masseindsamling ved hjælp af til opdatering

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 til opdatering klausul. Den anden hentning skal derfor returnere 0 rækker.

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.



  1. Uventede resultater fra SQL-forespørgsel med BETWEEN tidsstempler

  2. Forbinder mysql eksternt via gratis vært

  3. Fejl under udførelse af Mariadb-opdateringserklæring

  4. Sådan laver du to udvalgte erklæringer som to kolonner i postgres