Sql 甲骨文-比较日期
我有以下Oracle程序: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
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编程的内容。