首页 > 解决方案 > 如何使用 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 退出,并在执行上述表达式时插入语句一个值。

但是,我目前陷入了无限循环。

我们如何解决这个问题?

标签: sqloracle

解决方案


关于无限循环:代码中的天数不会改变。SYSDATE最终会改变,几天之内你的IF陈述就会得到满足。然而,说你

使用继续退出

有点奇怪;我会exitexit。你不会吗?

所以 - 是的,它是不确定的(至少在我看来是这样的)。如果您将其放置足够长的时间,您最终将耗尽磁盘空间(运行所有这些插入),然后它将失败。

检查tblattend 表的内容并查看您要插入的内容。然后修复你写的代码。如何?不知道,看你想做什么。如果您插入的行数超过例如 100 行,可能会设置一个计数器并退出循环。


推荐阅读