下面是我的sql语句SELECT DISTINCT *
        FROM (SELECT DISTINCT A.*, B.*
                FROM OCC_TN_AMA_081230 A, INC_TEL_LINE_NO B
               WHERE A.OG_DIAL_NUM = B.TEL_LINE_NO
                  OR A.OG_DIAL_NUM = B.GATEWAY_NO
                  OR A.IC_CLG_NUM = B.TEL_LINE_NO
                  OR A.IC_CLG_NUM = B.GATEWAY_NO)
       WHERE TEL_LINE_NO = NVL(DN, TEL_LINE_NO)
         AND GATEWAY_NO = NVL(GN, GATEWAY_NO)
         AND IP = NVL(ADDRESS, IP)
         AND BUILD_CODE = NVL(ADDRESSCODE, BUILD_CODE)
         AND IAD_NAME = NVL(IAD, IAD_NAME)
         AND PORT = NVL(PORT, PORT)
         AND ORIG_GREP = NVL(INTRUNKNUM, ORIG_GREP)
         AND TERM_GREP = NVL(OUTTRUNKNUM, TERM_GREP)
         AND ORIG_MEM = NVL(INTRUNKMEM, ORIG_MEM)
         AND TERM_MEM = NVL(OUTTRUNKMEM, TERM_MEM);我的原意是这样,nvl(a,b)里,a是我输入的参数,我是想当我不输入参数时,可以忽略这个条件,例如是where 1=1.
但执行时,执行了N久也没结果。当我把AND ORIG_MEM = NVL(INTRUNKMEM, ORIG_MEM) AND TERM_MEM = NVL(OUTTRUNKMEM, TERM_MEM) 这两个条件注释掉后,
结果很快出来。但一加上后很慢,等了一小时也没有出来。请问这是什么原因呢?

解决方案 »

  1.   

    你的要求可以通过动态SQL来实现。
      

  2.   

    如果用動態SQL,是不是通過組合sql語句來做?例如:
         if ADDRESS is not null then
             sql=sql + '條件'這種方法沒有試過,不過我不想做得太麻煩,才采用上面的方法.
    其實我也想知上面的方法問題出在哪里.
      

  3.   

    最简单的莫过于比较执行计划! 
    同时也不提倡你的写法--会消耗比较多CPU,特别是数据集比较大时候。