Vấn đề mà bạn đang cố gắng giải quyết là gì? Không hợp lý khi chạy UPDATE
riêng biệt các câu lệnh đối với mỗi phân vùng trong một vòng lặp. Nếu bạn thực sự muốn cập nhật mọi hàng trong bảng trong đó ab = 'c'
, chỉ phát hành một UPDATE
duy nhất tuyên bố
UPDATE cdr_data cdt
SET a = 'B'
WHERE ab = 'c'
có khả năng có PARALLEL
gợi ý rằng sẽ cho phép Oracle cập nhật nhiều phân vùng song song.
Nếu bạn thực sự, thực sự muốn cập nhật từng phân vùng một cách độc lập, sẽ có ý nghĩa hơn nhiều nếu bạn làm như vậy dựa trên các khóa phân vùng. Ví dụ:nếu bảng của bạn có các phân vùng hàng ngày dựa trên ngày
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;
Sử dụng phân vùng partition( <<partition name>> )
cú pháp là phương sách cuối cùng tuyệt đối. Nếu bạn thực sự quyết tâm đi theo con đường đó, bạn cần sử dụng SQL động, xây dựng câu lệnh SQL trong vòng lặp và sử dụng EXECUTE IMMEDIATE
hoặc dbms_sql
để thực thi nó.