Обновить несколько строк в курсоре - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь работать над этой программой шаг за шагом.Как и в коде ниже, я хочу напечатать старую цену и распечатать новую цену после обновления инвентаря таблицы с помощью курсора.

Используя курсор для обновления многих строк данных, создайте процедуру, которая принимает число, представляющее процентное увеличение цены,Процедура отобразит старую цену, новую цену и обновит базу данных новой ценой.

CREATE OR REPLACE PROCEDURE p5 
AS
CURSOR invent_cur IS
SELECT inv_price
FROM inventory;
v_inv_price inventory.inv_price%TYPE;
BEGIN
OPEN invent_cur;
LOOP
FETCH invent_cur INTO v_inv_price;
EXIT WHEN invent_cur%NOTFOUND;

IF (v_inv_price <= 0)
THEN
UPDATE inventory
set inv_price = inv_price*10;
DBMS_OUTPUT.PUT_LINE(v_inv_price);
END IF;

END LOOP;
CLOSE invent_cur;
END;
/

1 Ответ

0 голосов
/ 15 февраля 2019

Просто попробуйте это в вашем операторе обновления:

CREATE OR REPLACE PROCEDURE p5 (in_pc IN number)
AS
CURSOR invent_cur IS
SELECT inv_price
FROM inventory
WHERE inv_price > 0 
FOR UPDATE;
v_inv_price inventory.inv_price%TYPE;
BEGIN
OPEN invent_cur;
LOOP
FETCH invent_cur INTO v_inv_price;
EXIT WHEN invent_cur%NOTFOUND;

DBMS_OUTPUT.PUT_LINE('before: '||v_inv_price);
v_inv_price := v_inv_price * in_pc ;

UPDATE inventory
set inv_price = v_inv_price
WHERE CURRENT OF invent_cur;

DBMS_OUTPUT.PUT_LINE('after: '||v_inv_price);

END LOOP;

Чтобы выполнить:

SET serveroutput ON
exec p5(10);
commit; -- to save the changes
...