Sql 甲骨文-比较日期

Sql 甲骨文-比较日期,sql,oracle,stored-procedures,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; FE

我有以下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:输入值不够长,不适合日期格式

尝试了几个小时不同的比较方法,但其他方法都不起作用。
问题出在哪里???

您需要为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';

我用您提供的SELECT语句对其进行了更改,但它仍然给我相同的错误。如果((TO_DATE(d))=(TO_DATE('25-DEC'))那么应该是IF((TO_DATE(d,'dd-mon'))=(TO_DATE('25-DEC','dd-mon)),然后尝试一下ik_zelf的注释,该SELECT语句只是一个指针,让您了解哪里出了问题。如果您只是将该行替换为该语句,那么您应该阅读更多关于PL/SQL编程的内容。