SQL DECODE оптимизация - PullRequest
       10

SQL DECODE оптимизация

0 голосов
/ 14 февраля 2012

Если я использую что-то подобное в инструкции 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 ]

1 голос
/ 14 февраля 2012

Добавьте предложение DETERMINISTIC / RESULT CACHE к вашей функции ALIMENTATION_COD_ACT_MCH.Так что можно было бы использовать его дважды или более в списке выбора, но оракул будет вычислять результат функции только один раз.

0 голосов
/ 14 февраля 2012

Этот хак будет работать, если 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'), '')
...