use*_*285 1 oracle plsql plsqldeveloper
undefine dates
declare
v_dateInput VARCHAR(10);
v_dates DATE;
begin
v_dateInput := &&dates;
v_dates := to_date(v_dateInput,'dd-mm-yyyy');
DBMS_OUTPUT.put_line(v_dates);
end;
Run Code Online (Sandbox Code Playgroud)
不确定为什么每当我运行此代码时,例如03-03-1990的输入,此错误就会显示出来.
Error report:
ORA-01847: day of month must be between 1 and last day of month
ORA-06512: at line 6
01847. 00000 - "day of month must be between 1 and last day of month"
*Cause:
*Action:
Run Code Online (Sandbox Code Playgroud)
Eri*_*ler 12
哈,好的.这是因为&&替换了该变量,因此您的脚本变为:
declare
v_dateInput VARCHAR(10);
v_dates DATE;
begin
v_dateInput := 03-03-1990;
v_dates := to_date(v_dateInput,'dd-mm-yyyy');
DBMS_OUTPUT.put_line(v_dates);
end;
Run Code Online (Sandbox Code Playgroud)
请注意没有引号.v_dateInput实际上是'-1990',因为oracle计算03 - 03 - 1990的数值.当然,这不适用于给定的格式字符串.
要解决它,你需要
v_dateInput := '&&dates';
Run Code Online (Sandbox Code Playgroud)