Oracle
 sql >> база данни >  >> RDS >> Oracle

групово събиране, използвайки за актуализация

Проблемът е, че се опитвате да направите извличане през комит.

Когато отворите My_Data_Cur с for update клауза, Oracle трябва да заключи всеки ред в My_Data_1 таблица, преди да може да върне редове. Когато commit , Oracle трябва да освободи всички тези заключвания (ключалките, които Oracle създава, не обхващат транзакции). Тъй като курсорът вече няма ключалки, които сте поискали, Oracle трябва да затвори курсора, тъй като вече не може да удовлетвори for update клауза. Следователно второто извличане трябва да върне 0 реда.

Най-логичният подход почти винаги би бил премахването на commit и направете всичко с една транзакция. Ако наистина, наистина, наистина се нуждаете от отделни транзакции, ще трябва да отваряте и затваряте курсора за всяка итерация на цикъла. Най-вероятно ще искате да направите нещо, за да ограничите курсора да връща само 100 реда при всяко отваряне (т.е. rownum <= 100 клауза), така че да не поемате разходите за посещение на всеки ред, за да поставите ключалката и след това всеки ред, различен от 100-те, които сте обработили и изтрили, за да освободите ключалката всеки път през цикъла.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Генерирайте период от време от две колони за дати

  2. Проблем със създаването на чужд ключ в Oracle

  3. използвайки подзаявка вместо името на таблицата

  4. ORA-00918:Колоната е нееднозначно дефинирана

  5. C#:Предайте дефиниран от потребителя тип към съхранена процедура на Oracle