我看到开发人员使用隐式日期转换的代码。我想要一个明确的答案,说明他们为什么不应该这样做。
SELECT * from dba_objects WHERE Created >= '06-MAR-2012';
我看到开发人员使用隐式日期转换的代码。我想要一个明确的答案,说明他们为什么不应该这样做。
SELECT * from dba_objects WHERE Created >= '06-MAR-2012';
因为
'2012/12/1'
在美国是在欧洲的同一个字符串日期之后的 11 个月。允许隐式转换意味着您受位置设置的支配。
如果您能说出 11 个月是可接受的误差范围的企业,我会印象深刻。
如果具有不同日期格式的会话运行代码,则会出现问题。
语句失败
不良数据
在这种情况下,因为每个 alter/insert 语句都可以由不同的用户完成。他们都将运行相同的语句,但结果日期将完全不同。插入语句可能隐藏在仅间接调用的包中。因为没有返回错误,所以直到很久以后才可能发现问题。
SQL 注入
在这种情况下,恶意个人可以更改会话日期格式,从而使他们能够访问他们通常无法访问的数据。