这似乎是一个愚蠢的问题,但无论如何我都会在这里试试运气。请参阅下面的代码块,您会看到 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 = 星期日
最佳答案
当数字被解释为字符串时,会发生此错误。您可以通过以下方式重现它:
SELECT to_char(next_day(sysdate, '3'), 'Day') FROM DUAL;
谢谢@Ben需要指出的是,发生这种情况是因为数字由 PL/SQL 隐式转换并且不受支持。
一种解决方法是编写您自己的 number_to_day
函数,这样可以提高可读性,并且以后可以使其成为多语言版本。
关于oracle - DBMS_OUTPUT.PUT_LINE 中的 NEXT_DAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765742/