Oracle - 比较日期

时间:2012-05-11 12:02:19

标签: sql oracle stored-procedures

我有这个Oracle程序:

CREATE OR REPLACE PROCEDURE xmas
IS
    CURSOR curUser IS SELECT userID, coins FROM Users;
    thisUser curUser%ROWTYPE;
    d VARCHAR(7);
    CURSOR curDate IS SELECT TO_CHAR(sysdate, 'DD-MON') FROM DUAL;
BEGIN
    OPEN curDate;
    FETCH curDate INTO d;
    CLOSE curDate;
    IF ((TO_DATE(d)) = (TO_DATE('25-DEC'))) THEN
        OPEN curUser;
        LOOP
            FETCH curUser INTO thisUser;
            EXIT WHEN (curUser%NOTFOUND);
            thisUser.coins := thisUser.coins + 5.00;
            UPDATE Users SET coins = thisUser.coins WHERE userID = thisUser.userID;
        END LOOP;
        CLOSE curUser;
    END IF;
END xmas;

当我打电话给我时,我收到了这个错误:

ORA-01840:日期格式的输入值不够长。

尝试了几个小时的不同比较方法,没有其他工作。 问题是什么?

1 个答案:

答案 0 :(得分:2)

您需要为Oracle指定日期格式,以了解实际上'25 -DEC'的含义。

select TO_DATE('25-DEC', 'DD-MON') from dual;

问题应该放在这一行:

    IF ((TO_DATE(d)) = (TO_DATE('25-DEC'))) THEN

作为一个说明,在我看来,你也在进行大量不必要的转换。我不知道这是否是一次教育尝试,但为什么不运行以下更新:

update USERS 
set
  coins = coins + 5
where
  to_char(sysdate, 'DD-MON') = '25-DEC';