我有一个在这个级别失败的程序:
select trunc(sysdate - TO_DATE(STARTING_DATE, 'DD/MM/YYYY')) into DAYS_NBR from dual;
其中STARTING_DATE是输入日期,格式为DD / MM / YYYY。 这是错误代码
ORA-01858: a non-numeric character was found where a numeric was expected
你能检查一下吗?
答案 0 :(得分:0)
STARTING_DATE无法转换正确的日期格式。检查代码返回此错误的STARTING_DATE值。
答案 1 :(得分:0)
正如Giorgi Orvelashvili所说,starting_date是一个varchar2,输入的格式掩码与 你期待的格式。以下是您的错误的再现:
APPS@tst> --varchar
APPS@erptst> DECLARE
2 starting_date VARCHAR2(30) := to_char( SYSDATE -5,'MON/DD/YYYY') ;
3 days_nbr NUMBER;
4 BEGIN
5 SELECT trunc(SYSDATE - to_date(starting_date, 'DD/MM/YYYY'))
6 INTO days_nbr
7 FROM dual;
8 dbms_output.put_line(to_char(days_nbr));
9 END;
10 /
DECLARE
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected
ORA-06512: at line 5
更正此问题的方法是将starting_date声明为日期,然后不需要使用to_date转换函数:
APPS@tst> --date
APPS@tst> DECLARE
2 starting_date DATE:= SYSDATE -5;
3 days_nbr NUMBER;
4 BEGIN
5 SELECT TRUNC(SYSDATE - starting_date) INTO days_nbr FROM dual;
6 dbms_output.put_line(to_char(days_nbr));
7 END;
8 /
5
PL/SQL procedure successfully completed.
答案 2 :(得分:-1)
MedAli,尝试比较你的日期面具,可能是线索在这里?
DECLARE
starting_date VARCHAR2(30) := to_char( SYSDATE -5,'MON/DD/YYYY') ;
BEGIN
...
SELECT trunc(SYSDATE - to_date(starting_date, 'DD/MM/YYYY'))...
END;
一般来说,BTW可以使用标准格式,例如:日期' 2015-12-31'