问题描述
我试图使用以下代码验证函数DBMS_UTILITY.GET_TIME返回的值的true。
在重复执行此代码3次后,我得到了3个不同的值,如下所示。
PL/SQL过程成功完成。
经过时间 = 4.17
PL/SQL过程成功完成。
经过时间 = 4.36
PL/SQL过程成功完成。
经过时间 = 4.02
显然,在完成5秒的循环后,我预计经过的时间会接近5秒,或者至少大于5秒,但我很惊讶地看到这些值不是这样。我错过了什么吗?
DECLARE curr_time1 DATE := SYSDATE; curr_time2 NUMBER := dbms_utility.get_time; BEGIN LOOP EXIT WHEN SYSDATE >= curr_time1 + (5/(24*60*60));-- exit loop after 5 seconds END LOOP; dbms_output.put_Line ('Elapsed Time = '||(dbms_utility.get_time - curr_time2)/100); END; /复制
在重复执行此代码3次后,我得到了3个不同的值,如下所示。
PL/SQL过程成功完成。
经过时间 = 4.17
PL/SQL过程成功完成。
经过时间 = 4.36
PL/SQL过程成功完成。
经过时间 = 4.02
显然,在完成5秒的循环后,我预计经过的时间会接近5秒,或者至少大于5秒,但我很惊讶地看到这些值不是这样。我错过了什么吗?
专家解答
你在这里观察到的是由于日期的粒度。这些只报告时间到最接近的秒。
因此,如果您在00:00:00.999999处获得初始时间,则您的变量具有00:00:00的 (时间) 值。当时间到00:00:05时,您的循环将退出。因此,它只是4.00000...1s之前,你打这个!
切换到具有高达9小数秒精度的时间戳,您应该会看到它一致地报告5s:
因此,如果您在00:00:00.999999处获得初始时间,则您的变量具有00:00:00的 (时间) 值。当时间到00:00:05时,您的循环将退出。因此,它只是4.00000...1s之前,你打这个!
切换到具有高达9小数秒精度的时间戳,您应该会看到它一致地报告5s:
declare curr_time1 timestamp with time zone := systimestamp; curr_time2 number := dbms_utility.get_time; begin loop exit when current_timestamp >= curr_time1 + interval '5' second; end loop; dbms_output.put_line( 'Elapsed Time = ' || ( dbms_utility.get_time - curr_time2 ) / 100 ); end; / Elapsed Time = 5复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
500次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
479次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
403次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
395次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
370次阅读
2025-04-01 11:08:44
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
357次阅读
2025-04-18 14:18:38
Oracle 19c RAC更换IP实战,运维必看!
szrsu
338次阅读
2025-04-08 23:57:08
oracle定时任务常用攻略
virvle
313次阅读
2025-03-25 16:05:19
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
312次阅读
2025-04-15 14:48:05
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
309次阅读
2025-03-24 09:42:53