0

この SQL を実行すると、116,463 行が得られます。select * from appsdis.appsdisc_phones_gen_v

ビュー定義スクリプトにある選択を実行すると、11,702 行が取得されます。

結果セットが異なる理由がわかりません。

ビュースクリプトは次のとおりです。

CREATE OR REPLACE FORCE VIEW APPSDISC.APPSDISC_PHONES_GEN_V
(PARTY_ID, CUSTOMER_ID, CUSTOMER_NUMBER, PHONE_NUMBER, PHONE_TYPE)
AS 
SELECT party_id,
          customer_id,
          customer_number,
          phone_number,
          phone_type
     FROM appsdisc_phones_v pv1
    WHERE pv1.phone_type LIKE
             DECODE (TRIM (SUBSTR (pv1.attribute14, 1, 4)),
                     'FR', 'FR T%',
                     'PHONE')  
          AND pv1.contact_point_id =
                 (SELECT MIN (pv2.contact_point_id)
                    FROM appsdisc_phones_v pv2
                   WHERE pv2.customer_id = pv1.customer_id
                         AND pv2.phone_type LIKE
                                DECODE (
                                   TRIM (SUBSTR (pv1.attribute14, 1, 4)),
                                   'FR', 'FR T%',
                                   'PHONE'));
4

2 に答える 2

0

ゴードンは正しく、選択はビューと同じ結果を返すはずです。異なるスキーマ、データベース、またはデータベース リンクを介してクエリを実行するなどの問題は、観察している内容を説明している可能性があります。これは、以下の同じデータベースとスキーマで 2 つの SQL コマンドを実行し、両方から返された値を比較することで確認できます。

まず、ビューが返す行数を SQL で確認します。

SELECT COUNT(*) FROM APPSDISC.APPSDISC_PHONES_GEN_V;

次に、ビューのクエリが返す行数を SQL で確認します。

WITH RESULTS AS (
     SELECT party_id,
          customer_id,
          customer_number,
          phone_number,
          phone_type
     FROM appsdisc_phones_v pv1
    WHERE pv1.phone_type LIKE
             DECODE (TRIM (SUBSTR (pv1.attribute14, 1, 4)),
                     'FR', 'FR T%',
                     'PHONE')  
          AND pv1.contact_point_id =
                 (SELECT MIN (pv2.contact_point_id)
                    FROM appsdisc_phones_v pv2
                   WHERE pv2.customer_id = pv1.customer_id
                         AND pv2.phone_type LIKE
                                DECODE (
                                   TRIM (SUBSTR (pv1.attribute14, 1, 4)),
                                   'FR', 'FR T%',
                                   'PHONE')))
SELECT COUNT(*)
FROM RESULTS
/

両方のクエリが同じ値を返す必要があります。そうでない場合、この問題には、異なる数の行を返すクエリ以上のものがあります。

于 2013-08-27T17:58:08.620 に答える