NEXT_DAY在DBMS_OUTPUT.PUT_LINE中

时间:2015-08-01 20:07:22

标签: oracle plsql dbms-output

这似乎是一个愚蠢的问题,但无论如何我会在这里试试运气。请参阅下面的代码块,您会看到 NEXT_DAY SELECT 语句中接受1和'Sunday'作为参数,但仅在 DBMS_OUTPUT.PUT_LINE 中'星期天',并抛出错误1 - “ORA-01846:不是一周中的有效日期”。

如果我把'星期天',它的确有效。我在这里缺少什么?

declare 

  wday varchar(10);

begin

  select to_char(next_day(sysdate,1),'Day') into wday from dual; -- <== working with 1
  dbms_output.put_line (wday);

  select to_char(next_day(sysdate,'Sunday'),'Day') into wday from dual; -- <== working with 'Sunday'
  dbms_output.put_line (wday);

  --dbms_output.put_line (to_char(next_day(sysdate,1),'Day')); -- <== not working with 1

  dbms_output.put_line (to_char(next_day(sysdate,'Sunday'),'Day')); -- <== working with 'Sunday'

end;

/

PS:我的NLS配置:1 =星期日

1 个答案:

答案 0 :(得分:2)

当数字被解释为字符串时,会发生此错误。您可以使用以下内容重现它​​:

SELECT to_char(next_day(sysdate, '3'), 'Day') FROM DUAL;

感谢@Ben指出,这是因为数字被PL / SQL隐式转换并且不支持。

一种解决方法是编写自己的number_to_day函数,这样可以提高可读性,并且可以在以后使用多语言。