PL / SQL函数返回错误的结果

时间:2016-09-01 07:21:49

标签: sql plsql oracle-sqldeveloper sqlplus sql-navigator

我下面的PL / SQL函数在SQL Navigator和SQL Developer中返回了错误的结果,但是在SQL Plus中返回了正确的答案。

我们运行的脚本正在执行它并返回错误的答案,因此尝试修复它。任何人都可以看到它的任何问题吗?它适用于大多数人,但我有一些人进入并在SQL Navigator和Developer中返回null / nothing。它没有为他们填充l_end_date,因此没有填充。

出于某种原因,在SQL Plus中正常工作。

{{1}}

2 个答案:

答案 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_TERRITORYNLS_DATE_FORMAT等。 所以我建议在脚本中明确设置这些值。例如像EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TERRITORY=''AMERICA''';

这样的东西

一些参考文献:

NLS_DATE_FORMAT

NLS_TERRITORY