“CURRENT_DATE 是 VARCHAR2 类型”
好吧,这破坏了我的第一个想法 8-)
但我认为问题在于您使用CURRENT_DATE
. 假设是 Oracle 函数存在两个潜在问题:
- CURRENT_DATE 是 DATE 数据类型,因此具有时间元素。把它定型是没有意义的。
CURRENT_DATE 返回为系统时区调整的值。这大概是您的 IF 测试的重点。但是你知道价值观是什么吗?
但它仍然是一个简单的调试任务。检查您的价值观以了解正在发生的事情。这是一个使用 DBMS_OUTPUT(又名 The Devil's Debugger)的示例,因为我不知道您是否在使用更好工具的环境中工作。
TODAY := trunc(sysdate) + 9/24;
dbms_output.put_line('TODAY = '||to_char(today, 'DD-MON-YYYY HH24:MI:SS'));
dbms_output.put_line('PREVIOUS_DATE = '||to_char(previous_date, 'DD-MON-YYYY HH24:MI:SS'));
dbms_output.put_line('CURRENT_DATE = '||current_date);
IF PREVIOUS_DATE < TODAY AND
to_date(CURRENT_DATE, 'DD-MON-YYYY HH24:MI:SS') >= TODAY
THEN
....
不妨同时简化您的代码。
请记住,要查看 DBMS_OUTPUT.PUT_LINE 的输出,您需要为您使用的任何客户端设置 SERVEROUTPUT ON。
顺便说一句,声明与 Oracle 内置函数同名的变量是不好的做法。这就是为什么在我们的声明中添加一个作用域前缀(l_
对于本地、p_
对于参数等)是个好主意。我们不必做完整的匈牙利语来获得很多好处。