oracle - Oracle ORA01858 比较日期为空
问题描述
只是在我复习的时候问这个。我确定我错过了一些愚蠢的东西。我有一些 PLSQL 将日期与空值进行比较:
BEGIN
RETURN CASE
WHEN (i_date_one IS NULL) THEN -- ORA01858 occurs here
i_date_two
WHEN (i_date_one = c_min_date) THEN
NULL
ELSE
i_date_one
END;
i_date_one 和 i_date_two 的表都有该列的日期类型,但偶尔会弹出错误。我怀疑这是由于桌子上根本不存在一行,但有人有任何提示吗?
解决方案
ORA-01858: 在需要数字的地方发现了一个非数字字符
如果 - 正如你所说 -i_date_one
并且i_date_two
是DATE
s,那么他们不能提出那个错误。DATE
列仅接受有效日期。
但是,如果这些是应该VARCHAR2
包含日期的列,那么是的 - 它们可以包含不是有效日期的内容,例如(是字母“o”和数字“六”),它会引发. 例如:16.o6.2020
o6
ORA-01858
SQL> declare
2 my_date date;
3 i_date_one varchar2(20) := '16.o6.2020';
4 begin
5 my_date := i_date_one;
6 end;
7 /
end;
*
ERROR at line 6:
ORA-01858: a non-numeric character was found where a numeric was expected
ORA-06512: at line 5
SQL>
如果是这种情况,您宁愿将日期存储到DATE
数据类型列中。搜索所有可能的错误案例可能需要一些时间。
我不认为将任何东西与NULL
加薪进行比较ORA-01858
;我认为你走错了路。
SQL> declare
2 my_date date;
3 i_date_one varchar2(20) := '16.o6.2020';
4 begin
5 my_date := case when i_date_one is null then sysdate
6 else null
7 end;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL>
推荐阅读
- node.js - 自定义 cookie 发送到浏览器但未存储
- android - 如何在单击时更改两个按钮(男性和女性)的状态
- python - 不同的 crc16 C 和 Python3?
- go - proto.Marshal 内存不足
- javascript - 为 WebGL 纹理加载图像但由于 CORS 而失败
- android - 高级搜索栏崩溃
- javascript - 在我的数组中推送许多对象会擦除数组中所有以前的对象(React with Hooks)
- php - 无论如何在谷歌浏览器中自动将维基百科链接更改为 wiki-zero?
- ruby-on-rails - 创建一个 simple_form,它将由邮件程序在 rails 中自动发送
- matlab - Matlab中的样本t检验