【发布时间】:2019-03-30 03:28:44
【问题描述】:
我想知道当我尝试用整数比较天数和秒数间隔时,oracle 的幕后发生了什么。
以下示例。
SET SERVEROUTPUT ON;
DECLARE
v_date1 TIMESTAMP := current_timestamp ;
v_date2 TIMESTAMP := current_timestamp - 150;
BEGIN
-- Wrong way. But what is happening here?
IF v_date1 - v_date2 < 2 THEN
DBMS_OUTPUT.PUT_LINE('YES - why?');
ELSE
DBMS_OUTPUT.PUT_LINE('NO');
END IF;
-- Correct way
IF v_date1 < v_date2 + 2 THEN
DBMS_OUTPUT.PUT_LINE('YES');
ELSE
DBMS_OUTPUT.PUT_LINE('NO - works as expected');
END IF;
-- Another correct way
IF v_date1 - v_date2 < INTERVAL '2' DAY THEN
DBMS_OUTPUT.PUT_LINE('YES');
ELSE
DBMS_OUTPUT.PUT_LINE('NO - works as expected as well');
END IF;
END;
有人可以向我解释为什么第一个 IF 被评估为真吗?
【问题讨论】:
-
有趣。在 SQL 中,
WHERE INTERVAL '1' MINUTE < 2之类的条件会失败,而 PL/SQL 中的IF INTERVAL '1' MINUTE < 2不会引发错误。即使在 18c 中也有相同的行为:dbfiddle.uk/…
标签: oracle plsql types oracle12c intervals