SQL DECODE优化

时间:2012-02-14 08:13:09

标签: sql oracle decode

如果我在UPDATE指令中使用这样的东西并且我想检查函数是否返回'N',那么设置'':

ta.COD_ACT_MCH= ALIMENTATION_COD_ACT_MCH(ta.CA_DDE_TYP_DDE,tb.COD_SECVTE,tb.NUM_FOU1,ta.CA_COD_ENSCIAL)

是这样做的吗?或者它调用该函数两次?我该如何优化呢?

   ta.COD_ACT_MCH=DECODE( ALIMENTATION_COD_ACT_MCH(ta.CA_DDE_TYP_DDE,tb.COD_SECVTE,tb.NUM_FOU1,ta.CA_COD_ENSCIAL),
'N',
' ',
ALIMENTATION_COD_ACT_MCH(ta.CA_DDE_TYP_DDE,tb.COD_SECVTE,tb.NUM_FOU1,ta.CA_COD_ENSCIAL))

2 个答案:

答案 0 :(得分:1)

将DETERMINISTIC / RESULT CACHE子句添加到函数ALIMENTATION_COD_ACT_MCH中。因此可以在选择列表中使用两次或更多次,但oracle只计算一次函数的结果。

答案 1 :(得分:0)

黑客将有效,除非ALIMENTATION_COD_ACT_MCH可以返回NULL

NVL(NULLIF(
  ALIMENTATION_COD_ACT_MCH(ta.CA_DDE_TYP_DDE,tb.COD_SECVTE,tb.NUM_FOU1,ta.CA_COD_ENSCIAL),
  'N'), '')