我创建了一个过程来查找today
和expiry_date
之间的日期。
表列格式已经是日期格式。
虽然创建过程成功,但没有错误,但是在执行过程时显示如下所示
ORA-01858:在需要数字的地方找到了非数字字符
ALTER SESSION SET NLS_DATE_FORMAT ='dd-mm-yyyy';
CREATE OR REPLACE PROCEDURE flow (
today IN DATE,
expiry_date IN DATE
) AS
BEGIN
FOR rec in (
SELECT *
FROM flow4
WHERE englishcalendar BETWEEN 'englishcalendar.today'
AND 'englishcalendar.expiry_date')
LOOP
dbms_output.put_line(rec.englishcalendar);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(sqlerrm);
END;
/
EXEC FLOW('01-02-2017','03-04-2018');
/
我也曾尝试在过程和过程执行中添加to_date,但是我遇到了相同的错误 我也尝试了这个参考 Getting Error - ORA-01858: a non-numeric character was found where a numeric was expected
注意 englishcalendar
包含“ dd-mm-yyyy”日期格式的2019年连续日期
答案 0 :(得分:1)
'englishcalendar.today'
是不是日期的字符串。同样'englishcalendar.expiry_date'
。 Oracle试图将这些字符串转换为日期并失败,因为它们不是日期。
简单的解决方案:将参数作为标识符而不是字符串引用:
...
FOR rec in (
SELECT *
FROM flow4
WHERE englishcalendar BETWEEN today
AND expiry_date)
...