【发布时间】:2016-05-01 10:03:06
【问题描述】:
我已经隔离了一个非常具体的代码片段,它可以在我们的 HP-UX Oracle 11.2 环境中运行,但在我们的 RHEL 7.1 Oracle 11.2 环境中却失败了。关于为什么会发生这种情况的任何指示?
其他一切(PSU 级别除外)通常相同。
TIA
AND v_effective_date
BETWEEN DECODE
(pet.attribute1,'OVERTIMEVACCOMP',
fnd_date.canonical_to_date(prv2.result_value),
TO_DATE ('01/01/0001', 'DD/MM/YYYY'))
AND DECODE
(pet.attribute1,'OVERTIMEVACCOMP',
fnd_date.canonical_to_date(prv3.result_value),
TO_DATE ('01/01/0001', 'DD/MM/YYYY'))
【问题讨论】:
-
确定不是解码问题?您确定 fnd_date.canonical_to_date 函数在两个系统中返回相同的值吗?
-
“失败”是什么意思 - 没有返回您期望的数据(在这种情况下可能是数据问题)?给你一个错误?该函数是否有效,对于两种环境都完全相同,并且您确定这不会出错(这可能在查询中静默发生)-如果您在 PL/SQL 上下文中为表中的每一行调用该函数报告任何错误?特定于环境的行为/错误是可能的,但不太可能。
-
这是一个将所有数据存储为字符串的实体-属性-值模型吗?在极少数情况下,
DECODE或CASE可以无序或不短路地评估表达式。查询不应假定在调用函数之前检查了OVERTIMEVACCOMP条件。 -
感谢各位大侠的反馈,我们将代码改写如下:
-
编辑 cmets 真的只有 5 分钟吗?无论如何...感谢您的反馈,我们将代码改写为“AND DECODE (pet.attribute1,'OVERTIMEVACCOMP', fnd_date.canonical_to_date(prv2.result_value),TO_DATE ('01/01/0001', ' DD/MM/YYYY'))