如果你执行 startDate - endDate
,由于 endDate
晚于 startDate
,结果会得到一个负数,该数字表示的是相差的天数。
相反,你可以使用 (endDate - startDate) DAY TO SECOND
,这样会得到一个正数,并返回 INTERVAL DAY TO SECOND
数据类型。
另外,你不需要使用 SELECT
语句来设置开始和结束时间,可以直接在PL/SQL中进行赋值。
DECLARE
CURSOR c1 IS SELECT * FROM my_Table;
my_record my_Table%ROWTYPE;
startDate DATE := SYSDATE;
endDate DATE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO my_record;
EXIT WHEN c1%notfound;
-- 执行一些更新操作
END LOOP;
-- 提交事务;
CLOSE c1;
endDate := SYSDATE;
DBMS_OUTPUT.PUT_LINE((endDate - startDate) DAY TO SECOND);
END;
/
根据你的样本数据,这段代码可能输出类似这样的结果:
+000000000 00:00:08.000000000
如果你想看到精确到小数秒的结果,可以使用 SYSTIMESTAMP
和 TIMESTAMP
替换 SYSDATE
和 DATE
:
DECLARE
CURSOR c1 IS SELECT * FROM my_Table;
my_record my_Table%ROWTYPE;
startDate TIMESTAMP := SYSTIMESTAMP;
endDate TIMESTAMP;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO my_record;
EXIT WHEN c1%notfound;
-- 执行一些更新操作
END LOOP;
-- 提交事务;
CLOSE c1;
endDate := SYSTIMESTAMP;
DBMS_OUTPUT.PUT_LINE((endDate - startDate) DAY TO SECOND);
END;
/
根据你的样本数据,这段代码可能输出类似这样的结果:
+000000000 00:00:09.133979000
在线示例