我下面的PL / SQL函数在SQL Navigator和SQL Developer中返回了错误的结果,但是在SQL Plus中返回了正确的答案。
我们运行的脚本正在执行它并返回错误的答案,因此尝试修复它。任何人都可以看到它的任何问题吗?它适用于大多数人,但我有一些人进入并在SQL Navigator和Developer中返回null / nothing。它没有为他们填充l_end_date,因此没有填充。
出于某种原因,在SQL Plus中正常工作。
{{1}}
答案 0 :(得分:3)
to_date()
值上使用DATE
。 to_date()
将 varchar
转换为date
。
如果用DATE
调用它,则日期值会转换为varchar,然后转换回它开始的日期 - 并受到两次邪恶的隐式数据类型转换处理。
变量l_dob
定义为DATE
,因此您必须更改
add_months(to_date(l_dob+1),216 );
...
add_months(to_date(l_dob), 216);
到
add_months(l_dob+1,216);
...
add_months(l_dob, 216);
答案 1 :(得分:1)
可能是因为
的值不同 在不同环境中 NLS_TERRITORY
,NLS_DATE_FORMAT
等。
所以我建议在脚本中明确设置这些值。例如像EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TERRITORY=''AMERICA''';
一些参考文献: