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

Актуализиране на разделена таблица oracle

Какъв е проблемът, който се опитвате да разрешите? Няма смисъл да се изпълнява отделно UPDATE изрази срещу всеки дял в цикъл. Ако наистина искате да актуализирате всеки ред в таблицата, където ab = 'c' , просто издайте една единствена UPDATE изявление

UPDATE cdr_data cdt
   SET a = 'B'
 WHERE ab = 'c'

потенциално с PARALLEL намек, който ще позволи на Oracle да актуализира няколко дяла паралелно.

Ако наистина, наистина искате да актуализирате всеки дял независимо, би било много по-логично да го направите въз основа на ключовете на дяла. Например, ако вашата таблица има дневни дялове въз основа на дата

FOR i IN 1 .. <<number of daily partitions>>
LOOP
  UPDATE cdr_data cdt
     SET a = 'B'
   WHERE ab = 'c'
     AND partition_key = <<minimum date>> + i;
END LOOP;

Използване на partition( <<partition name>> ) синтаксисът е абсолютна крайна мярка. Ако наистина сте решени да тръгнете по този път, ще трябва да използвате динамичен SQL, като конструирате SQL оператора в цикъла и използвате EXECUTE IMMEDIATE или dbms_sql за да го изпълните.



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

  2. Моля, помогнете за предотвратяване на рефакторинг на слоя данни на този ODP.NET код и транзакции

  3. Oracle SQL - Сума и групиране на данни по седмица

  4. колона не е нула отлагаема

  5. Заявка за сливане, връщаща ORA-30926:не може да получи стабилен набор от редове в изходните таблици