oracle - DBMS_OUTPUT.PUT_LINE 中的 NEXT_DAY

标签 oracle plsql dbms-output

这似乎是一个愚蠢的问题,但无论如何我都会在这里试试运气。请参阅下面的代码块,您会看到 NEXT_DAYSELECT 语句中同时接受 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/

相关文章:

sql - 使用 nvl 和 max 查找唯一值

sql - Oracle SQL 中的数组

甲骨文 - ORA-06502 : PL/SQL: numeric or value error (DBMS_OUTPUT)

sql - 选择前150行,然后选择下150行,依此类推?

node.js - 将数组值批量插入数据库 Node.js、Oracle、orawrap

java - 将当前数据库条目与要插入的新数据同步

oracle - SQL开发人员: How to make log output from a trigger?

oracle - 是否有关于使用显式 ANSI JOIN 与隐式连接的 Oracle 官方建议?

c# - 当我尝试向 Oracle 插入日期和时间时出现 ORA-01843

mysql - 什么相当于 DBMS_OUTPUT 的 MySQL