Zdefiniowano tabelę Produkt:
CREATE TABLE Produkt (Produkt_id number, Cena number, Ilosc number)
parallel 2
partition by range(Produkt_id)
(
partition p1 values less than (10),
partition p2 values less than (20),
partition p3 values less than (MAXVALUE)
);
Następnie dodano kilka wierszy
INSERT INTO Produkt VALUES (5, 100, 10);
INSERT INTO Produkt VALUES (10, 200, 10);
INSERT INTO Produkt VALUES (15, 300, 10);
INSERT INTO Produkt VALUES (20, 400, 10);
COMMIT;
Zadanie polega na zwiększeniu ceny o 10%, ale tylko w przypadku, gdy wartość wszystkich produktów po podwyżce nie przekroczy 1 mln.
Przykładowe rozwiązanie:
DECLARE
Wartość number;
BEGIN
UPDATE Produkt SET Cena = Cena * 1.10;
SELECT SUM(Cena*Ilość) INTO Wartość FROM Produkt;
If Wartość > 1000000 then
ROLLBACK;
ELSE
COMMIT;
END IF;
END;
/
może zakończyć się błędem "ORA - 12838: cannot read/modify an object after modifying it in parallel." Dlaczego? I od czego to zależy?