为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:win11
【CPU】:
【问题描述】*:我在程序块执行sql时,
begin
if to_char(sysdate,'Day') not in('Monday','星期一') then
print(to_char(sysdate,'Day'));
else
print('其他'||to_char(sysdate,'Day'));
end if;
end;
每次都是执行else ,尝试了很多次循环也是,但是我只要把这个sql放到程序包里,我去用定时任务执行时,就会时不时 不跳转到else ,我测试了每个时间段去执行,一天我就发生了2次,8点和13点的时候会进if,其他会直接到else,不理解为什么会这样,而且输出结果也是星期一
to_char(sysdate,'Day') 返回 '星期一'
你分支条件是 NOT IN ('Monday','星期一'),自然会走 ELSE 了
这段sql的效果为:
最简单的测试办法为:把sysdate改为具体的时间,比如
CREATE OR REPLACE PROCEDURE P1 AUTHID DEFINER AS begin if to_char('2024-07-09 10:34:42','Day') not in('Monday','星期一') then print(to_char('2024-07-09 10:34:42','Day')); else print('其他'||to_char('2024-07-08 10:34:42','Day')); end if; end; CALL P1
输出结果为星期二。
我猜你需要的是周一输出"星期一",其他天输出"其它星期X"?,那正确的写法应该是这样:
CREATE OR REPLACE PROCEDURE P1 AUTHID DEFINER AS begin if to_char(sysdate,'Day') in('Monday','星期一') then -- 把not in 改为in print(to_char(sysdate,'Day')); else print('其他'||to_char(sysdate,'Day')); end if; end;