sql - 如何使用 PL/SQL 操作日期的时间?
问题描述
如何使用 PL/SQL 操作日期的时间?
下面是我的代码。
declare
venter date := '2021-01-05' ;
vexit date := '2021-01-05';
vseq number := 2;
begin
while venter < sysdate loop
venter := venter+1;
venter := to_date(round(dbms_random.value(40,59)), 'mi');
venter := to_date(round(dbms_random.value(0,59)), 'ss');
vexit := to_date(round(dbms_random.value(0,20)), 'mi');
vexit := to_date(round(dbms_random.value(0,59)), 'ss');
if mod(to_char(venter, 'd'), 7) + 1 in (6, 7) then
continue;
end if;
insert into tblattend values (vseq, venter, vexit, 'normal', null, '1');
vseq := vseq + 1;
end loop;
end;
我想在 中随机设置分钟和秒venter
,如果是周末,使用 continue 退出,并在执行上述表达式时插入语句一个值。
但是,我目前陷入了无限循环。
我们如何解决这个问题?
解决方案
关于无限循环:代码中的天数不会改变。SYSDATE
最终会改变,几天之内你的IF
陈述就会得到满足。然而,说你
使用继续退出
有点奇怪;我会exit
用exit。你不会吗?
所以 - 是的,它是不确定的(至少在我看来是这样的)。如果您将其放置足够长的时间,您最终将耗尽磁盘空间(运行所有这些插入),然后它将失败。
检查tblattend
表的内容并查看您要插入的内容。然后修复你写的代码。如何?不知道,看你想做什么。如果您插入的行数超过例如 100 行,可能会设置一个计数器并退出循环。
推荐阅读
- php - 在下拉列表中显示数据并选择编辑选项
- mysql - 如何使用外键 Spring Boot Java MySQL 将数据插入多个表
- sql - 如何在 h2 db 中修复“不明确的列名”
- c - 我的“猜密码”不起作用,如何解决?
- python - 如何使用 gzip 有效地将许多小文件压缩成许多小的 .tar.gz 文件?
- java - 如何将字符串转换为浮点数组?
- divio - Divio 应用程序冻结并停止工作
- ios - 无法将我的 Codename One iOS 应用程序连接到我的服务器
- c# - 做一个课堂项目,设法得到一些稳定的代码。但是它没有按预期计算。为什么以及什么会解决它?
- numpy - 如何在 np.reshape 期间指定顺序