如果我在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))
答案 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'), '')