【发布时间】:2018-05-21 08:44:42
【问题描述】:
试图创建一个在结束日期小于 sysdate 时更改日期的过程,但它会更改所有日期,所以这里是代码:
CREATE OR REPLACE PROCEDURE CHANGE_DATES
as
BEGIN
FOR rec IN (SELECT start_period_date,end_period_date FROM mytable) LOOP
DBMS_OUTPUT.PUT_LINE('Old Date:' || rec.start_period_date ||' ' || rec.end_period_date);
IF rec.end_period_date < sysdate THEN
update mytable set start_period_date = sysdate;
update mytable set end_period_date = sysdate + 6;
commit;
--DBMS_OUTPUT.PUT_LINE('New Date:' || begin_date ||' ' ||end_date);
end if;
END LOOP;
END;
【问题讨论】:
-
您听说过“WHERE”子句吗?您的更新语句显式更新每条记录。
-
您需要一个 CURSOR 并使用
WHERE CURRENT OF或选择 rowid 并在 WHERE 子句中引用它