異構資料庫遷移 sql等價改寫

哎呀我的天吶發表於2022-06-14

原SQL跑不出結果,因為有or只能走nested loop

select a.busin_code_chg, a.prd_code_chg, a.share_class,         
a.seller_code, a.targ_prd_code_chg, a.targ_share_class    
from tbfund_c5navtmp3 a, 
tbfundchangelimit b   
where a.busin_code_chg ='13'       
and (a.prd_code_chg = b.prd_code or b.prd_code = '*' )    
and (a.share_class = b.share_class or b.share_class = '*')     
and (a.seller_code = b.seller_code or b.seller_code = '*')     
and ((case when a.targ_prd_code_chg = '*' then ' ' else a.targ_prd_code_chg end) = b.targ_prd_code or b.targ_prd_code = '*')     
and (a.targ_share_class = b.targ_share_class or b.targ_share_class = '*')     
and (case when b.client_type = ' ' then '*' else b.client_type end) = '*';

將SQL改成union all結構,走or expansion 執行計劃

SELECT vm_tmp.i1 BUSIN_CODE_CHG,
       vm_tmp.i2 PRD_CODE_CHG,
       vm_tmp.i3 SHARE_CLASS,
       vm_tmp.i4 SELLER_CODE,
       vm_tmp.i5 TARG_PRD_CODE_CHG,
       vm_tmp.i6 TARG_SHARE_CLASS
FROM ((SELECT A.BUSIN_CODE_CHG    i1,
              A.PRD_CODE_CHG      i2,
              A.SHARE_CLASS       i3,
              A.SELLER_CODE       i4,
              A.TARG_PRD_CODE_CHG i5,
              A.TARG_SHARE_CLASS  i6
       FROM TBFUNDCHANGELIMIT B,
            TBFUND_C5NAVTMP3 A
       WHERE A.BUSIN_CODE_CHG = '13'
         AND B.PRD_CODE = '*'
         AND B.SHARE_CLASS = '*'
         AND B.SELLER_CODE = '*'
         AND B.TARG_PRD_CODE = '*'
         AND B.TARG_SHARE_CLASS = '*'
         AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*')
      UNION ALL
      ((SELECT A.BUSIN_CODE_CHG    i1,
               A.PRD_CODE_CHG      i2,
               A.SHARE_CLASS       i3,
               A.SELLER_CODE       i4,
               A.TARG_PRD_CODE_CHG i5,
               A.TARG_SHARE_CLASS  i6
        FROM TBFUNDCHANGELIMIT B,
             TBFUND_C5NAVTMP3 A
        WHERE A.BUSIN_CODE_CHG = '13'
          AND A.PRD_CODE_CHG = B.PRD_CODE
          AND B.SHARE_CLASS = '*'
          AND B.SELLER_CODE = '*'
          AND B.TARG_PRD_CODE = '*'
          AND B.TARG_SHARE_CLASS = '*'
          AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
          AND lnnvl(B.PRD_CODE = '*'))
       UNION ALL
       ((SELECT A.BUSIN_CODE_CHG    i1,
                A.PRD_CODE_CHG      i2,
                A.SHARE_CLASS       i3,
                A.SELLER_CODE       i4,
                A.TARG_PRD_CODE_CHG i5,
                A.TARG_SHARE_CLASS  i6
         FROM TBFUNDCHANGELIMIT B,
              TBFUND_C5NAVTMP3 A
         WHERE A.BUSIN_CODE_CHG = '13'
           AND B.PRD_CODE = '*'
           AND A.SHARE_CLASS = B.SHARE_CLASS
           AND B.SELLER_CODE = '*'
           AND B.TARG_PRD_CODE = '*'
           AND B.TARG_SHARE_CLASS = '*'
           AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
           AND lnnvl(B.SHARE_CLASS = '*'))
        UNION ALL
        ((SELECT A.BUSIN_CODE_CHG    i1,
                 A.PRD_CODE_CHG      i2,
                 A.SHARE_CLASS       i3,
                 A.SELLER_CODE       i4,
                 A.TARG_PRD_CODE_CHG i5,
                 A.TARG_SHARE_CLASS  i6
          FROM TBFUNDCHANGELIMIT B,
               TBFUND_C5NAVTMP3 A
          WHERE A.BUSIN_CODE_CHG = '13'
            AND B.PRD_CODE = '*'
            AND B.SHARE_CLASS = '*'
            AND A.SELLER_CODE = B.SELLER_CODE
            AND B.TARG_PRD_CODE = '*'
            AND B.TARG_SHARE_CLASS = '*'
            AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
            AND lnnvl(B.SELLER_CODE = '*'))
         UNION ALL
         ((SELECT A.BUSIN_CODE_CHG    i1,
                  A.PRD_CODE_CHG      i2,
                  A.SHARE_CLASS       i3,
                  A.SELLER_CODE       i4,
                  A.TARG_PRD_CODE_CHG i5,
                  A.TARG_SHARE_CLASS  i6
           FROM TBFUNDCHANGELIMIT B,
                TBFUND_C5NAVTMP3 A
           WHERE A.BUSIN_CODE_CHG = '13'
             AND B.PRD_CODE = '*'
             AND B.SHARE_CLASS = '*'
             AND B.SELLER_CODE = '*'
             AND B.TARG_PRD_CODE = CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
             AND B.TARG_SHARE_CLASS = '*'
             AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
             AND lnnvl(B.TARG_PRD_CODE = '*'))
          UNION ALL
          ((SELECT A.BUSIN_CODE_CHG    i1,
                   A.PRD_CODE_CHG      i2,
                   A.SHARE_CLASS       i3,
                   A.SELLER_CODE       i4,
                   A.TARG_PRD_CODE_CHG i5,
                   A.TARG_SHARE_CLASS  i6
            FROM TBFUNDCHANGELIMIT B,
                 TBFUND_C5NAVTMP3 A
            WHERE A.BUSIN_CODE_CHG = '13'
              AND B.PRD_CODE = '*'
              AND B.SHARE_CLASS = '*'
              AND B.SELLER_CODE = '*'
              AND B.TARG_PRD_CODE = '*'
              AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
              AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
              AND lnnvl(B.TARG_SHARE_CLASS = '*'))
           UNION ALL
           ((SELECT A.BUSIN_CODE_CHG    i1,
                    A.PRD_CODE_CHG      i2,
                    A.SHARE_CLASS       i3,
                    A.SELLER_CODE       i4,
                    A.TARG_PRD_CODE_CHG i5,
                    A.TARG_SHARE_CLASS  i6
             FROM TBFUNDCHANGELIMIT B,
                  TBFUND_C5NAVTMP3 A
             WHERE A.BUSIN_CODE_CHG = '13'
               AND A.PRD_CODE_CHG = B.PRD_CODE
               AND A.SHARE_CLASS = B.SHARE_CLASS
               AND B.SELLER_CODE = '*'
               AND B.TARG_PRD_CODE = '*'
               AND B.TARG_SHARE_CLASS = '*'
               AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
               AND lnnvl(B.SHARE_CLASS = '*')
               AND lnnvl(B.PRD_CODE = '*'))
            UNION ALL
            ((SELECT A.BUSIN_CODE_CHG    i1,
                     A.PRD_CODE_CHG      i2,
                     A.SHARE_CLASS       i3,
                     A.SELLER_CODE       i4,
                     A.TARG_PRD_CODE_CHG i5,
                     A.TARG_SHARE_CLASS  i6
              FROM TBFUNDCHANGELIMIT B,
                   TBFUND_C5NAVTMP3 A
              WHERE A.BUSIN_CODE_CHG = '13'
                AND A.PRD_CODE_CHG = B.PRD_CODE
                AND B.SHARE_CLASS = '*'
                AND A.SELLER_CODE = B.SELLER_CODE
                AND B.TARG_PRD_CODE = '*'
                AND B.TARG_SHARE_CLASS = '*'
                AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                AND lnnvl(B.SELLER_CODE = '*')
                AND lnnvl(B.PRD_CODE = '*'))
             UNION ALL
             ((SELECT A.BUSIN_CODE_CHG    i1,
                      A.PRD_CODE_CHG      i2,
                      A.SHARE_CLASS       i3,
                      A.SELLER_CODE       i4,
                      A.TARG_PRD_CODE_CHG i5,
                      A.TARG_SHARE_CLASS  i6
               FROM TBFUNDCHANGELIMIT B,
                    TBFUND_C5NAVTMP3 A
               WHERE A.BUSIN_CODE_CHG = '13'
                 AND A.PRD_CODE_CHG = B.PRD_CODE
                 AND B.SHARE_CLASS = '*'
                 AND B.SELLER_CODE = '*'
                 AND B.TARG_PRD_CODE =
                     CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                 AND B.TARG_SHARE_CLASS = '*'
                 AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                 AND lnnvl(B.TARG_PRD_CODE = '*')
                 AND lnnvl(B.PRD_CODE = '*'))
              UNION ALL
              ((SELECT A.BUSIN_CODE_CHG    i1,
                       A.PRD_CODE_CHG      i2,
                       A.SHARE_CLASS       i3,
                       A.SELLER_CODE       i4,
                       A.TARG_PRD_CODE_CHG i5,
                       A.TARG_SHARE_CLASS  i6
                FROM TBFUNDCHANGELIMIT B,
                     TBFUND_C5NAVTMP3 A
                WHERE A.BUSIN_CODE_CHG = '13'
                  AND A.PRD_CODE_CHG = B.PRD_CODE
                  AND B.SHARE_CLASS = '*'
                  AND B.SELLER_CODE = '*'
                  AND B.TARG_PRD_CODE = '*'
                  AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                  AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                  AND lnnvl(B.TARG_SHARE_CLASS = '*')
                  AND lnnvl(B.PRD_CODE = '*'))
               UNION ALL
               ((SELECT A.BUSIN_CODE_CHG    i1,
                        A.PRD_CODE_CHG      i2,
                        A.SHARE_CLASS       i3,
                        A.SELLER_CODE       i4,
                        A.TARG_PRD_CODE_CHG i5,
                        A.TARG_SHARE_CLASS  i6
                 FROM TBFUNDCHANGELIMIT B,
                      TBFUND_C5NAVTMP3 A
                 WHERE A.BUSIN_CODE_CHG = '13'
                   AND B.PRD_CODE = '*'
                   AND A.SHARE_CLASS = B.SHARE_CLASS
                   AND A.SELLER_CODE = B.SELLER_CODE
                   AND B.TARG_PRD_CODE = '*'
                   AND B.TARG_SHARE_CLASS = '*'
                   AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                   AND lnnvl(B.SELLER_CODE = '*')
                   AND lnnvl(B.SHARE_CLASS = '*'))
                UNION ALL
                ((SELECT A.BUSIN_CODE_CHG    i1,
                         A.PRD_CODE_CHG      i2,
                         A.SHARE_CLASS       i3,
                         A.SELLER_CODE       i4,
                         A.TARG_PRD_CODE_CHG i5,
                         A.TARG_SHARE_CLASS  i6
                  FROM TBFUNDCHANGELIMIT B,
                       TBFUND_C5NAVTMP3 A
                  WHERE A.BUSIN_CODE_CHG = '13'
                    AND B.PRD_CODE = '*'
                    AND A.SHARE_CLASS = B.SHARE_CLASS
                    AND B.SELLER_CODE = '*'
                    AND B.TARG_PRD_CODE =
                        CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                    AND B.TARG_SHARE_CLASS = '*'
                    AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                    AND lnnvl(B.TARG_PRD_CODE = '*')
                    AND lnnvl(B.SHARE_CLASS = '*'))
                 UNION ALL
                 ((SELECT A.BUSIN_CODE_CHG    i1,
                          A.PRD_CODE_CHG      i2,
                          A.SHARE_CLASS       i3,
                          A.SELLER_CODE       i4,
                          A.TARG_PRD_CODE_CHG i5,
                          A.TARG_SHARE_CLASS  i6
                   FROM TBFUNDCHANGELIMIT B,
                        TBFUND_C5NAVTMP3 A
                   WHERE A.BUSIN_CODE_CHG = '13'
                     AND B.PRD_CODE = '*'
                     AND A.SHARE_CLASS = B.SHARE_CLASS
                     AND B.SELLER_CODE = '*'
                     AND B.TARG_PRD_CODE = '*'
                     AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                     AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                     AND lnnvl(B.TARG_SHARE_CLASS = '*')
                     AND lnnvl(B.SHARE_CLASS = '*'))
                  UNION ALL
                  ((SELECT A.BUSIN_CODE_CHG    i1,
                           A.PRD_CODE_CHG      i2,
                           A.SHARE_CLASS       i3,
                           A.SELLER_CODE       i4,
                           A.TARG_PRD_CODE_CHG i5,
                           A.TARG_SHARE_CLASS  i6
                    FROM TBFUNDCHANGELIMIT B,
                         TBFUND_C5NAVTMP3 A
                    WHERE A.BUSIN_CODE_CHG = '13'
                      AND B.PRD_CODE = '*'
                      AND B.SHARE_CLASS = '*'
                      AND A.SELLER_CODE = B.SELLER_CODE
                      AND B.TARG_PRD_CODE =
                          CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                      AND B.TARG_SHARE_CLASS = '*'
                      AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                      AND lnnvl(B.TARG_PRD_CODE = '*')
                      AND lnnvl(B.SELLER_CODE = '*'))
                   UNION ALL
                   ((SELECT A.BUSIN_CODE_CHG    i1,
                            A.PRD_CODE_CHG      i2,
                            A.SHARE_CLASS       i3,
                            A.SELLER_CODE       i4,
                            A.TARG_PRD_CODE_CHG i5,
                            A.TARG_SHARE_CLASS  i6
                     FROM TBFUNDCHANGELIMIT B,
                          TBFUND_C5NAVTMP3 A
                     WHERE A.BUSIN_CODE_CHG = '13'
                       AND B.PRD_CODE = '*'
                       AND B.SHARE_CLASS = '*'
                       AND A.SELLER_CODE = B.SELLER_CODE
                       AND B.TARG_PRD_CODE = '*'
                       AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                       AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                       AND lnnvl(B.TARG_SHARE_CLASS = '*')
                       AND lnnvl(B.SELLER_CODE = '*'))
                    UNION ALL
                    ((SELECT A.BUSIN_CODE_CHG    i1,
                             A.PRD_CODE_CHG      i2,
                             A.SHARE_CLASS       i3,
                             A.SELLER_CODE       i4,
                             A.TARG_PRD_CODE_CHG i5,
                             A.TARG_SHARE_CLASS  i6
                      FROM TBFUNDCHANGELIMIT B,
                           TBFUND_C5NAVTMP3 A
                      WHERE A.BUSIN_CODE_CHG = '13'
                        AND B.PRD_CODE = '*'
                        AND B.SHARE_CLASS = '*'
                        AND B.SELLER_CODE = '*'
                        AND B.TARG_PRD_CODE =
                            CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                        AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                        AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                        AND lnnvl(B.TARG_SHARE_CLASS = '*')
                        AND lnnvl(B.TARG_PRD_CODE = '*'))
                     UNION ALL
                     ((SELECT A.BUSIN_CODE_CHG    i1,
                              A.PRD_CODE_CHG      i2,
                              A.SHARE_CLASS       i3,
                              A.SELLER_CODE       i4,
                              A.TARG_PRD_CODE_CHG i5,
                              A.TARG_SHARE_CLASS  i6
                       FROM TBFUNDCHANGELIMIT B,
                            TBFUND_C5NAVTMP3 A
                       WHERE A.BUSIN_CODE_CHG = '13'
                         AND B.PRD_CODE = '*'
                         AND A.SHARE_CLASS = B.SHARE_CLASS
                         AND A.SELLER_CODE = B.SELLER_CODE
                         AND B.TARG_PRD_CODE =
                             CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                         AND B.TARG_SHARE_CLASS = '*'
                         AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                         AND lnnvl(B.TARG_PRD_CODE = '*')
                         AND lnnvl(B.SELLER_CODE = '*')
                         AND lnnvl(B.SHARE_CLASS = '*'))
                      UNION ALL
                      ((SELECT A.BUSIN_CODE_CHG    i1,
                               A.PRD_CODE_CHG      i2,
                               A.SHARE_CLASS       i3,
                               A.SELLER_CODE       i4,
                               A.TARG_PRD_CODE_CHG i5,
                               A.TARG_SHARE_CLASS  i6
                        FROM TBFUNDCHANGELIMIT B,
                             TBFUND_C5NAVTMP3 A
                        WHERE A.BUSIN_CODE_CHG = '13'
                          AND B.PRD_CODE = '*'
                          AND A.SHARE_CLASS = B.SHARE_CLASS
                          AND A.SELLER_CODE = B.SELLER_CODE
                          AND B.TARG_PRD_CODE = '*'
                          AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                          AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                          AND lnnvl(B.TARG_SHARE_CLASS = '*')
                          AND lnnvl(B.SELLER_CODE = '*')
                          AND lnnvl(B.SHARE_CLASS = '*'))
                       UNION ALL
                       ((SELECT A.BUSIN_CODE_CHG    i1,
                                A.PRD_CODE_CHG      i2,
                                A.SHARE_CLASS       i3,
                                A.SELLER_CODE       i4,
                                A.TARG_PRD_CODE_CHG i5,
                                A.TARG_SHARE_CLASS  i6
                         FROM TBFUNDCHANGELIMIT B,
                              TBFUND_C5NAVTMP3 A
                         WHERE A.BUSIN_CODE_CHG = '13'
                           AND A.PRD_CODE_CHG = B.PRD_CODE
                           AND B.SHARE_CLASS = '*'
                           AND A.SELLER_CODE = B.SELLER_CODE
                           AND B.TARG_PRD_CODE = '*'
                           AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                           AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                           AND lnnvl(B.TARG_SHARE_CLASS = '*')
                           AND lnnvl(B.SELLER_CODE = '*')
                           AND lnnvl(B.PRD_CODE = '*'))
                        UNION ALL
                        ((SELECT A.BUSIN_CODE_CHG    i1,
                                 A.PRD_CODE_CHG      i2,
                                 A.SHARE_CLASS       i3,
                                 A.SELLER_CODE       i4,
                                 A.TARG_PRD_CODE_CHG i5,
                                 A.TARG_SHARE_CLASS  i6
                          FROM TBFUNDCHANGELIMIT B,
                               TBFUND_C5NAVTMP3 A
                          WHERE A.BUSIN_CODE_CHG = '13'
                            AND B.PRD_CODE = '*'
                            AND A.SHARE_CLASS = B.SHARE_CLASS
                            AND B.SELLER_CODE = '*'
                            AND B.TARG_PRD_CODE =
                                CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                            AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                            AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                            AND lnnvl(B.TARG_SHARE_CLASS = '*')
                            AND lnnvl(B.TARG_PRD_CODE = '*')
                            AND lnnvl(B.SHARE_CLASS = '*'))
                         UNION ALL
                         ((SELECT A.BUSIN_CODE_CHG    i1,
                                  A.PRD_CODE_CHG      i2,
                                  A.SHARE_CLASS       i3,
                                  A.SELLER_CODE       i4,
                                  A.TARG_PRD_CODE_CHG i5,
                                  A.TARG_SHARE_CLASS  i6
                           FROM TBFUNDCHANGELIMIT B,
                                TBFUND_C5NAVTMP3 A
                           WHERE A.BUSIN_CODE_CHG = '13'
                             AND A.PRD_CODE_CHG = B.PRD_CODE
                             AND A.SHARE_CLASS = B.SHARE_CLASS
                             AND B.SELLER_CODE = '*'
                             AND B.TARG_PRD_CODE = '*'
                             AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                             AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                             AND lnnvl(B.TARG_SHARE_CLASS = '*')
                             AND lnnvl(B.SHARE_CLASS = '*')
                             AND lnnvl(B.PRD_CODE = '*'))
                          UNION ALL
                          ((SELECT A.BUSIN_CODE_CHG    i1,
                                   A.PRD_CODE_CHG      i2,
                                   A.SHARE_CLASS       i3,
                                   A.SELLER_CODE       i4,
                                   A.TARG_PRD_CODE_CHG i5,
                                   A.TARG_SHARE_CLASS  i6
                            FROM TBFUNDCHANGELIMIT B,
                                 TBFUND_C5NAVTMP3 A
                            WHERE A.BUSIN_CODE_CHG = '13'
                              AND A.PRD_CODE_CHG = B.PRD_CODE
                              AND B.SHARE_CLASS = '*'
                              AND B.SELLER_CODE = '*'
                              AND B.TARG_PRD_CODE =
                                  CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                              AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                              AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                              AND lnnvl(B.TARG_SHARE_CLASS = '*')
                              AND lnnvl(B.TARG_PRD_CODE = '*')
                              AND lnnvl(B.PRD_CODE = '*'))
                           UNION ALL
                           ((SELECT A.BUSIN_CODE_CHG    i1,
                                    A.PRD_CODE_CHG      i2,
                                    A.SHARE_CLASS       i3,
                                    A.SELLER_CODE       i4,
                                    A.TARG_PRD_CODE_CHG i5,
                                    A.TARG_SHARE_CLASS  i6
                             FROM TBFUNDCHANGELIMIT B,
                                  TBFUND_C5NAVTMP3 A
                             WHERE A.BUSIN_CODE_CHG = '13'
                               AND B.PRD_CODE = '*'
                               AND B.SHARE_CLASS = '*'
                               AND A.SELLER_CODE = B.SELLER_CODE
                               AND B.TARG_PRD_CODE =
                                   CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                               AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                               AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                               AND lnnvl(B.TARG_SHARE_CLASS = '*')
                               AND lnnvl(B.TARG_PRD_CODE = '*')
                               AND lnnvl(B.SELLER_CODE = '*'))
                            UNION ALL
                            ((SELECT A.BUSIN_CODE_CHG    i1,
                                     A.PRD_CODE_CHG      i2,
                                     A.SHARE_CLASS       i3,
                                     A.SELLER_CODE       i4,
                                     A.TARG_PRD_CODE_CHG i5,
                                     A.TARG_SHARE_CLASS  i6
                              FROM TBFUNDCHANGELIMIT B,
                                   TBFUND_C5NAVTMP3 A
                              WHERE A.BUSIN_CODE_CHG = '13'
                                AND A.PRD_CODE_CHG = B.PRD_CODE
                                AND B.SHARE_CLASS = '*'
                                AND A.SELLER_CODE = B.SELLER_CODE
                                AND B.TARG_PRD_CODE =
                                    CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                                AND B.TARG_SHARE_CLASS = '*'
                                AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                AND lnnvl(B.TARG_PRD_CODE = '*')
                                AND lnnvl(B.SELLER_CODE = '*')
                                AND lnnvl(B.PRD_CODE = '*'))
                             UNION ALL
                             ((SELECT A.BUSIN_CODE_CHG    i1,
                                      A.PRD_CODE_CHG      i2,
                                      A.SHARE_CLASS       i3,
                                      A.SELLER_CODE       i4,
                                      A.TARG_PRD_CODE_CHG i5,
                                      A.TARG_SHARE_CLASS  i6
                               FROM TBFUNDCHANGELIMIT B,
                                    TBFUND_C5NAVTMP3 A
                               WHERE A.BUSIN_CODE_CHG = '13'
                                 AND A.PRD_CODE_CHG = B.PRD_CODE
                                 AND A.SHARE_CLASS = B.SHARE_CLASS
                                 AND A.SELLER_CODE = B.SELLER_CODE
                                 AND B.TARG_PRD_CODE = '*'
                                 AND B.TARG_SHARE_CLASS = '*'
                                 AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                 AND lnnvl(B.SELLER_CODE = '*')
                                 AND lnnvl(B.SHARE_CLASS = '*')
                                 AND lnnvl(B.PRD_CODE = '*'))
                              UNION ALL
                              ((SELECT A.BUSIN_CODE_CHG    i1,
                                       A.PRD_CODE_CHG      i2,
                                       A.SHARE_CLASS       i3,
                                       A.SELLER_CODE       i4,
                                       A.TARG_PRD_CODE_CHG i5,
                                       A.TARG_SHARE_CLASS  i6
                                FROM TBFUNDCHANGELIMIT B,
                                     TBFUND_C5NAVTMP3 A
                                WHERE A.BUSIN_CODE_CHG = '13'
                                  AND A.PRD_CODE_CHG = B.PRD_CODE
                                  AND A.SHARE_CLASS = B.SHARE_CLASS
                                  AND B.SELLER_CODE = '*'
                                  AND B.TARG_PRD_CODE =
                                      CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                                  AND B.TARG_SHARE_CLASS = '*'
                                  AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                  AND lnnvl(B.TARG_PRD_CODE = '*')
                                  AND lnnvl(B.SHARE_CLASS = '*')
                                  AND lnnvl(B.PRD_CODE = '*'))
                               UNION ALL
                               ((SELECT A.BUSIN_CODE_CHG    i1,
                                        A.PRD_CODE_CHG      i2,
                                        A.SHARE_CLASS       i3,
                                        A.SELLER_CODE       i4,
                                        A.TARG_PRD_CODE_CHG i5,
                                        A.TARG_SHARE_CLASS  i6
                                 FROM TBFUNDCHANGELIMIT B,
                                      TBFUND_C5NAVTMP3 A
                                 WHERE A.BUSIN_CODE_CHG = '13'
                                   AND A.PRD_CODE_CHG = B.PRD_CODE
                                   AND A.SHARE_CLASS = B.SHARE_CLASS
                                   AND A.SELLER_CODE = B.SELLER_CODE
                                   AND B.TARG_PRD_CODE = '*'
                                   AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                                   AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                   AND lnnvl(B.PRD_CODE = '*')
                                   AND lnnvl(B.SHARE_CLASS = '*')
                                   AND lnnvl(B.SELLER_CODE = '*')
                                   AND lnnvl(B.TARG_SHARE_CLASS = '*'))
                                UNION ALL
                                ((SELECT A.BUSIN_CODE_CHG    i1,
                                         A.PRD_CODE_CHG      i2,
                                         A.SHARE_CLASS       i3,
                                         A.SELLER_CODE       i4,
                                         A.TARG_PRD_CODE_CHG i5,
                                         A.TARG_SHARE_CLASS  i6
                                  FROM TBFUNDCHANGELIMIT B,
                                       TBFUND_C5NAVTMP3 A
                                  WHERE A.BUSIN_CODE_CHG = '13'
                                    AND B.PRD_CODE = '*'
                                    AND A.SHARE_CLASS = B.SHARE_CLASS
                                    AND A.SELLER_CODE = B.SELLER_CODE
                                    AND B.TARG_PRD_CODE =
                                        CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                                    AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                                    AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                    AND lnnvl(B.TARG_SHARE_CLASS = '*')
                                    AND lnnvl(B.TARG_PRD_CODE = '*')
                                    AND lnnvl(B.SELLER_CODE = '*')
                                    AND lnnvl(B.SHARE_CLASS = '*'))
                                 UNION ALL
                                 ((SELECT A.BUSIN_CODE_CHG    i1,
                                          A.PRD_CODE_CHG      i2,
                                          A.SHARE_CLASS       i3,
                                          A.SELLER_CODE       i4,
                                          A.TARG_PRD_CODE_CHG i5,
                                          A.TARG_SHARE_CLASS  i6
                                   FROM TBFUNDCHANGELIMIT B,
                                        TBFUND_C5NAVTMP3 A
                                   WHERE A.BUSIN_CODE_CHG = '13'
                                     AND A.PRD_CODE_CHG = B.PRD_CODE
                                     AND A.SHARE_CLASS = B.SHARE_CLASS
                                     AND A.SELLER_CODE = B.SELLER_CODE
                                     AND B.TARG_PRD_CODE =
                                         CASE A.TARG_PRD_CODE_CHG WHEN '*' THEN ' ' ELSE A.TARG_PRD_CODE_CHG END
                                     AND B.TARG_SHARE_CLASS = '*'
                                     AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                     AND lnnvl(B.PRD_CODE = '*')
                                     AND lnnvl(B.SHARE_CLASS = '*')
                                     AND lnnvl(B.TARG_PRD_CODE = '*')
                                     AND lnnvl(B.SELLER_CODE = '*'))
                                  UNION ALL
                                  ((SELECT A.BUSIN_CODE_CHG    i1,
                                           A.PRD_CODE_CHG      i2,
                                           A.SHARE_CLASS       i3,
                                           A.SELLER_CODE       i4,
                                           A.TARG_PRD_CODE_CHG i5,
                                           A.TARG_SHARE_CLASS  i6
                                    FROM TBFUNDCHANGELIMIT B,
                                         TBFUND_C5NAVTMP3 A
                                    WHERE A.BUSIN_CODE_CHG = '13'
                                      AND A.PRD_CODE_CHG = B.PRD_CODE
                                      AND A.SHARE_CLASS = B.SHARE_CLASS
                                      AND B.SELLER_CODE = '*'
                                      AND B.TARG_PRD_CODE = CASE A.TARG_PRD_CODE_CHG
                                                                WHEN '*' THEN ' '
                                                                ELSE A.TARG_PRD_CODE_CHG END
                                      AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                                      AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                      AND lnnvl(B.PRD_CODE = '*')
                                      AND lnnvl(B.TARG_PRD_CODE = '*')
                                      AND lnnvl(B.SHARE_CLASS = '*')
                                      AND lnnvl(B.TARG_SHARE_CLASS = '*'))
                                   UNION ALL
                                   ((SELECT A.BUSIN_CODE_CHG    i1,
                                            A.PRD_CODE_CHG      i2,
                                            A.SHARE_CLASS       i3,
                                            A.SELLER_CODE       i4,
                                            A.TARG_PRD_CODE_CHG i5,
                                            A.TARG_SHARE_CLASS  i6
                                     FROM TBFUNDCHANGELIMIT B,
                                          TBFUND_C5NAVTMP3 A
                                     WHERE A.BUSIN_CODE_CHG = '13'
                                       AND A.PRD_CODE_CHG = B.PRD_CODE
                                       AND B.SHARE_CLASS = '*'
                                       AND A.SELLER_CODE = B.SELLER_CODE
                                       AND B.TARG_PRD_CODE = CASE A.TARG_PRD_CODE_CHG
                                                                 WHEN '*' THEN ' '
                                                                 ELSE A.TARG_PRD_CODE_CHG END
                                       AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                                       AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                       AND lnnvl(B.TARG_PRD_CODE = '*')
                                       AND lnnvl(B.SELLER_CODE = '*')
                                       AND lnnvl(B.PRD_CODE = '*')
                                       AND lnnvl(B.TARG_SHARE_CLASS = '*'))
                                    UNION ALL
                                    (SELECT A.BUSIN_CODE_CHG    i1,
                                            A.PRD_CODE_CHG      i2,
                                            A.SHARE_CLASS       i3,
                                            A.SELLER_CODE       i4,
                                            A.TARG_PRD_CODE_CHG i5,
                                            A.TARG_SHARE_CLASS  i6
                                     FROM TBFUNDCHANGELIMIT B,
                                          TBFUND_C5NAVTMP3 A
                                     WHERE A.BUSIN_CODE_CHG = '13'
                                       AND A.PRD_CODE_CHG = B.PRD_CODE
                                       AND A.SHARE_CLASS = B.SHARE_CLASS
                                       AND A.SELLER_CODE = B.SELLER_CODE
                                       AND B.TARG_PRD_CODE = CASE A.TARG_PRD_CODE_CHG
                                                                 WHEN '*' THEN ' '
                                                                 ELSE A.TARG_PRD_CODE_CHG END
                                       AND A.TARG_SHARE_CLASS = B.TARG_SHARE_CLASS
                                       AND CASE B.CLIENT_TYPE WHEN ' ' THEN '*' ELSE B.CLIENT_TYPE END = '*'
                                       AND lnnvl(B.TARG_PRD_CODE = '*')
                                       AND lnnvl(B.PRD_CODE = '*')
                                       AND lnnvl(B.TARG_SHARE_CLASS = '*')
                                       AND lnnvl(B.SELLER_CODE = '*')
                                       AND lnnvl(B.SHARE_CLASS = '*'))))))))))))))))))))))))))))))))) vm_tmp

SQL很快便執行完,具體執行計劃略,本文只是給出優化改寫思路

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2900567/,如需轉載,請註明出處,否則將追究法律責任。

相關文章