2011-01-28 5 views
1

アップデート2011年1月31日オラクルMAX()のバグは、インデックスの制限につながる

私はDBの制限に対して実行していると思います。 GROUP BY式
とすべての非統一集計関数は、単一の
データベースブロックを超えている可能性があります。
は、オリジナルポストhttp://download.oracle.com/docs/cd/B19306_01/server.102/b14237/limits003.htm

を参照してください: - のProd

これは、Oracle Database 10g Enterprise Editionのリリース10.2.0.1.0です。

次のインサートは、真MAXを(戻らない)私はcontributionP NULL値と非NULL値を持つ相互matchKeyが同じである二つのレコード一
を持っている場合
値。
MAX()が返す値がNULL値であることがあります。

INSERT /*+ APPEND */ INTO meCostingXPrePre( 
    matchKey     , 
    contributionP    , 
    stimulusContributionP  , 
    contributionC    , 
    ageMultiplier    , 
    rateTableIdP    , 
    rateTableIdC    , 
    accountNbrP     , 
    accountNbrC     , 
    commissionExpenseAccount , 
    commissionReceivableAccount , 
    commissionType    , 
    commission     , 
    pmPm      , 
    fee       , 
    planAgeGroupIdP    , 
    planAgeGroupIdC    , 
    rafP      , 
    rafC      , 
    nbrEmployeesRafP   , 
    nbrEmployeesRafC   , 
    contractId     , 
    basePlanId     , 
    groupOrPolicyNumber   , 
    planCoverageDescription  , 
    cobraGopn     , 
    cobraPcd     , 
    cobraCid     , 
    benefitId     , 
    insuranceStart    , 
    insuranceEnd    , 
    categoryId     ) 
    SELECT 
     matchKey                 as matchKey     , 
     MAX(NVL(contributionP    ,0))         as contributionP    , 
     MAX(NVL(stimulusContributionP  ,0))         as stimulusContributionP  , 
     MAX(NVL(contributionC    ,0))         as contributionC    , 
     MAX(NVL(ageMultiplier    ,0))         as ageMultiplier    , 
     MAX(NVL(rateTableIdP    ,0))         as rateTableIdP    , 
     MAX(NVL(rateTableIdC    ,0))         as rateTableIdC    , 
     MAX(NVL(accountNbrP     ,0))         as accountNbrP     , 
     MAX(NVL(accountNbrC     ,0))         as accountNbrC     , 
     MAX(NVL(commissionExpenseAccount ,0))         as commissionExpenseAccount , 
     MAX(NVL(commissionReceivableAccount ,0))         as commissionReceivableAccount , 
     MAX(NVL(commissionType    ,0))         as commissionType    , 
     MAX(NVL(commission     ,0))         as commission     , 
     MAX(NVL(pmPm      ,0))         as pmPm      , 
     MAX(NVL(fee       ,0))         as fee       , 
     MAX(NVL(planAgeGroupIdP    ,0))         as planAgeGroupIdP    , 
     MAX(NVL(planAgeGroupIdC    ,0))         as planAgeGroupIdC    , 
     MAX(NVL(rafP      ,0))         as rafP      , 
     MAX(NVL(rafC      ,0))         as rafC      , 
     MAX(NVL(nbrEmployeesRafP   ,0))         as nbrEmployeesRafP   , 
     MAX(NVL(nbrEmployeesRafC   ,0))         as nbrEmployeesRafC   , 
     CASE WHEN MAX(contractId) IS NOT NULL AND 
       MIN(contractId) IS NOT NULL AND 
       MAX(contractId) != MIN(contractId) THEN 
     CASE WHEN MAX(contractId) = 'No Contract No' THEN 
      MIN(contractId) 
     WHEN MIN(contractId) = 'No Contract No' THEN 
      MAX(contractId) 
     ELSE 
      MAX(contractId) 
     END 
     ELSE 
     MAX(contractId) 
     END                   as contractId     , 
     MAX(NVL(basePlanId     ,0))         as basePlanId     , 
     CASE WHEN MAX(groupOrPolicyNumber) IS NOT NULL AND 
       MIN(groupOrPolicyNumber) IS NOT NULL AND 
       MAX(groupOrPolicyNumber) != MIN(groupOrPolicyNumber) THEN 
     CASE WHEN MAX(groupOrPolicyNumber) = 'No Contract No' THEN 
      MIN(groupOrPolicyNumber) 
     WHEN MIN(groupOrPolicyNumber) = 'No Contract No' THEN 
      MAX(groupOrPolicyNumber) 
     ELSE 
      MAX(groupOrPolicyNumber) 
     END 
     ELSE 
     MAX(groupOrPolicyNumber) 
     END                   as groupOrPolicyNumber   , 
     CASE WHEN MAX(planCoverageDescription) IS NOT NULL AND 
       MIN(planCoverageDescription) IS NOT NULL AND 
       MAX(planCoverageDescription) != MIN(planCoverageDescription) THEN 
     CASE WHEN MAX(planCoverageDescription) = 'No Contract No' THEN 
      MIN(planCoverageDescription) 
     WHEN MIN(planCoverageDescription) = 'No Contract No' THEN 
      MAX(planCoverageDescription) 
     ELSE 
      MAX(planCoverageDescription) 
     END 
     ELSE 
     MAX(planCoverageDescription) 
     END                   as planCoverageDescription  , 
     CASE WHEN MAX(cobraGopn) IS NOT NULL AND 
       MIN(cobraGopn) IS NOT NULL AND 
       MAX(cobraGopn) != MIN(cobraGopn) THEN 
     CASE WHEN MAX(cobraGopn) = 'No Contract No' THEN 
      MIN(cobraGopn) 
     WHEN MIN(cobraGopn) = 'No Contract No' THEN 
      MAX(cobraGopn) 
     ELSE 
      MAX(cobraGopn) 
     END 
     ELSE 
     MAX(cobraGopn) 
     END                   as cobraGopn     , 
     CASE WHEN MAX(cobraPcd) IS NOT NULL AND 
       MIN(cobraPcd) IS NOT NULL AND 
       MAX(cobraPcd) != MIN(cobraPcd) THEN 
     CASE WHEN MAX(cobraPcd) = 'No Contract No' THEN 
      MIN(cobraPcd) 
     WHEN MIN(cobraPcd) = 'No Contract No' THEN 
      MAX(cobraPcd) 
     ELSE 
      MAX(cobraPcd) 
     END 
     ELSE 
     MAX(cobraPcd) 
     END                   as cobraPcd     , 
     CASE WHEN MAX(cobraCid) IS NOT NULL AND 
       MIN(cobraCid) IS NOT NULL AND 
       MAX(cobraCid) != MIN(cobraCid) THEN 
     CASE WHEN MAX(cobraCid) = 'No Contract No' THEN 
      MIN(cobraCid) 
     WHEN MIN(cobraCid) = 'No Contract No' THEN 
      MAX(cobraCid) 
     ELSE 
      MAX(cobraCid) 
     END 
     ELSE 
     MAX(cobraCid) 
     END                   as cobraCid     , 
     MAX(benefitId       )         as benefitId     , 
     NULL                  as insuranceStart    , 
     NULL                  as insuranceEnd    , 
     NULL                  as categoryId      
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 

私は次のようにインデックスを構築し、CBOのヒントに

CREATE INDEX C$MECOSTINGXPREPREPRE$MULTI0 ON MECOSTINGXPREPREPRE 
(MATCHKEY, CONTRIBUTIONP, STIMULUSCONTRIBUTIONP, CONTRIBUTIONC, AGEMULTIPLIER, 
RATETABLEIDP, RATETABLEIDC, ACCOUNTNBRP, ACCOUNTNBRC, COMMISSIONEXPENSEACCOUNT, 
COMMISSIONRECEIVABLEACCOUNT, COMMISSIONTYPE, COMMISSION, PMPM, FEE, 
PLANAGEGROUPIDP, PLANAGEGROUPIDC, RAFP, RAFC, 
NBREMPLOYEESRAFP, NBREMPLOYEESRAFC, CONTRACTID, BASEPLANID, GROUPORPOLICYNUMBER, 
PLANCOVERAGEDESCRIPTION, COBRAGOPN, COBRAPCD, COBRACID, BENEFITID) 
NOLOGGING 
TABLESPACE INDX 
NOPARALLEL; 

INSERT /*+ APPEND */ INTO meCostingXPrePre(
    ...) 
    SELECT /*+ INDEX(meCostingXPrePrePre c$mecostingxpreprepre$multi0) */ 
     ... 
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 

を与える場合はこれが正しく動作するようにMAXを()を取得します。

私はインデックス

小さな問題

CREATE INDEX C$MECOSTINGXPREPREPRE$MULTI0 ON MECOSTINGXPREPREPRE 
(MATCHKEY, CONTRIBUTIONP, STIMULUSCONTRIBUTIONP, CONTRIBUTIONC, AGEMULTIPLIER, 
RATETABLEIDP, RATETABLEIDC, ACCOUNTNBRP, ACCOUNTNBRC, COMMISSIONEXPENSEACCOUNT, 
COMMISSIONRECEIVABLEACCOUNT, COMMISSIONTYPE, COMMISSION, PMPM, FEE, 
PLANAGEGROUPIDP, PLANAGEGROUPIDC, ADDRESSONEP, ADDRESSONEC, ADDRESSTWOP, 
ADDRESSTWOC, CITYP, CITYC, STATEP, STATEC, ZIPFULLP, ZIPFULLC, RAFP, RAFC, 
NBREMPLOYEESRAFP, NBREMPLOYEESRAFC, CONTRACTID, BASEPLANID, GROUPORPOLICYNUMBER, 
PLANCOVERAGEDESCRIPTION, COBRAGOPN, COBRAPCD, COBRACID, BENEFITID) 
NOLOGGING 
TABLESPACE INDX 
NOPARALLEL; 


ORA-01793を与える15個の余分な列を追加し、変更する必要が

:インデックス列の最大数は32

まずMAX(あり)大きな列セットでは機能せず、インデックス+ CBOパッチ
はインデックス制限につながります。

提案がありますか?

+3

「私は15の余分な列を追加する必要がある」 - これらは、ほとんどNEVべき言葉...ないです。 ..話さない。すでに使用されているテーブルに15個のカラムを追加している場合、あなたのデザインに問題があります。あなたが15列*を持っているならば、あなたが正規化できる場所を調べることを検討すべきです。 –

+2

MAX(NVL(cobraPcd、 ''))とは何ですか? Oracleでは ''はNULLと同じですので、NVL(cobraPcd、 '')は_cobraPcd_と同じです。とにかく、MAXはNULL値を処理します。 – Codo

+0

このバグはMetalinkに記載されていますか?それを再現するための簡単な*(それほど多くの列ではない)テストケースを考え出すことができますか? – Dan

答えて

0

OK、半分に作業を分割することは、私は必要なものを私を取得します:

INSERT /*+ APPEND */ INTO meCostingXPrePreFirstHalf( 
    matchKey     , 
    contributionP    , 
    stimulusContributionP  , 
    contributionC    , 
    ageMultiplier    , 
    rateTableIdP    , 
    rateTableIdC    , 
    accountNbrP     , 
    accountNbrC     , 
    commissionExpenseAccount , 
    commissionReceivableAccount , 
    commissionType    , 
    commission     , 
    pmPm      , 
    fee       , 
    planAgeGroupIdP    , 
    planAgeGroupIdC   ) 
    SELECT 
     matchKey         as matchKey     , 
     MAX(NVL(contributionP    ,0)) as contributionP    , 
     MAX(NVL(stimulusContributionP  ,0)) as stimulusContributionP  , 
     MAX(NVL(contributionC    ,0)) as contributionC    , 
     MAX(NVL(ageMultiplier    ,0)) as ageMultiplier    , 
     MAX(NVL(rateTableIdP    ,0)) as rateTableIdP    , 
     MAX(NVL(rateTableIdC    ,0)) as rateTableIdC    , 
     MAX(NVL(accountNbrP     ,0)) as accountNbrP     , 
     MAX(NVL(accountNbrC     ,0)) as accountNbrC     , 
     MAX(NVL(commissionExpenseAccount ,0)) as commissionExpenseAccount , 
     MAX(NVL(commissionReceivableAccount ,0)) as commissionReceivableAccount , 
     MAX(NVL(commissionType    ,0)) as commissionType    , 
     MAX(NVL(commission     ,0)) as commission     , 
     MAX(NVL(pmPm      ,0)) as pmPm      , 
     MAX(NVL(fee       ,0)) as fee       , 
     MAX(NVL(planAgeGroupIdP    ,0)) as planAgeGroupIdP    , 
     MAX(NVL(planAgeGroupIdC    ,0)) as planAgeGroupIdC     
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 
/* No commit yet. */ 

INSERT /*+ APPEND */ INTO meCostingXPrePreOtherHalf( 
    matchKey     , 
    rafP      , 
    rafC      , 
    nbrEmployeesRafP   , 
    nbrEmployeesRafC   , 
    contractId     , 
    basePlanId     , 
    groupOrPolicyNumber   , 
    planCoverageDescription  , 
    cobraGopn     , 
    cobraPcd     , 
    cobraCid     , 
    benefitId     , 
    insuranceStart    , 
    insuranceEnd    , 
    categoryId     ) 
    SELECT 
     matchKey                 as matchKey     , 
     MAX(NVL(rafP      ,0))         as rafP      , 
     MAX(NVL(rafC      ,0))         as rafC      , 
     MAX(NVL(nbrEmployeesRafP   ,0))         as nbrEmployeesRafP   , 
     MAX(NVL(nbrEmployeesRafC   ,0))         as nbrEmployeesRafC   , 
     CASE WHEN MAX(contractId) IS NOT NULL AND 
       MIN(contractId) IS NOT NULL AND 
       MAX(contractId) != MIN(contractId) THEN 
     CASE WHEN MAX(contractId) = 'No Contract No' THEN 
      MIN(contractId) 
     WHEN MIN(contractId) = 'No Contract No' THEN 
      MAX(contractId) 
     ELSE 
      MAX(contractId) 
     END 
     ELSE 
     MAX(contractId) 
     END                   as contractId     , 
     MAX(NVL(basePlanId     ,0))         as basePlanId     , 
     CASE WHEN MAX(groupOrPolicyNumber) IS NOT NULL AND 
       MIN(groupOrPolicyNumber) IS NOT NULL AND 
       MAX(groupOrPolicyNumber) != MIN(groupOrPolicyNumber) THEN 
     CASE WHEN MAX(groupOrPolicyNumber) = 'No Contract No' THEN 
      MIN(groupOrPolicyNumber) 
     WHEN MIN(groupOrPolicyNumber) = 'No Contract No' THEN 
      MAX(groupOrPolicyNumber) 
     ELSE 
      MAX(groupOrPolicyNumber) 
     END 
     ELSE 
     MAX(groupOrPolicyNumber) 
     END                   as groupOrPolicyNumber   , 
     CASE WHEN MAX(planCoverageDescription) IS NOT NULL AND 
       MIN(planCoverageDescription) IS NOT NULL AND 
       MAX(planCoverageDescription) != MIN(planCoverageDescription) THEN 
     CASE WHEN MAX(planCoverageDescription) = 'No Contract No' THEN 
      MIN(planCoverageDescription) 
     WHEN MIN(planCoverageDescription) = 'No Contract No' THEN 
      MAX(planCoverageDescription) 
     ELSE 
      MAX(planCoverageDescription) 
     END 
     ELSE 
     MAX(planCoverageDescription) 
     END                   as planCoverageDescription  , 
     CASE WHEN MAX(cobraGopn) IS NOT NULL AND 
       MIN(cobraGopn) IS NOT NULL AND 
       MAX(cobraGopn) != MIN(cobraGopn) THEN 
     CASE WHEN MAX(cobraGopn) = 'No Contract No' THEN 
      MIN(cobraGopn) 
     WHEN MIN(cobraGopn) = 'No Contract No' THEN 
      MAX(cobraGopn) 
     ELSE 
      MAX(cobraGopn) 
     END 
     ELSE 
     MAX(cobraGopn) 
     END                   as cobraGopn     , 
     CASE WHEN MAX(cobraPcd) IS NOT NULL AND 
       MIN(cobraPcd) IS NOT NULL AND 
       MAX(cobraPcd) != MIN(cobraPcd) THEN 
     CASE WHEN MAX(cobraPcd) = 'No Contract No' THEN 
      MIN(cobraPcd) 
     WHEN MIN(cobraPcd) = 'No Contract No' THEN 
      MAX(cobraPcd) 
     ELSE 
      MAX(cobraPcd) 
     END 
     ELSE 
     MAX(cobraPcd) 
     END                   as cobraPcd     , 
     CASE WHEN MAX(cobraCid) IS NOT NULL AND 
       MIN(cobraCid) IS NOT NULL AND 
       MAX(cobraCid) != MIN(cobraCid) THEN 
     CASE WHEN MAX(cobraCid) = 'No Contract No' THEN 
      MIN(cobraCid) 
     WHEN MIN(cobraCid) = 'No Contract No' THEN 
      MAX(cobraCid) 
     ELSE 
      MAX(cobraCid) 
     END 
     ELSE 
     MAX(cobraCid) 
     END                   as cobraCid     , 
     MAX(benefitId       )         as benefitId      
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 
/* No commit yet. */ 

INSERT /*+ APPEND */ INTO meCostingXPrePre( 
    matchKey     , 
    contributionP    , 
    stimulusContributionP  , 
    contributionC    , 
    ageMultiplier    , 
    rateTableIdP    , 
    rateTableIdC    , 
    accountNbrP     , 
    accountNbrC     , 
    commissionExpenseAccount , 
    commissionReceivableAccount , 
    commissionType    , 
    commission     , 
    pmPm      , 
    fee       , 
    planAgeGroupIdP    , 
    planAgeGroupIdC    , 
    rafP      , 
    rafC      , 
    nbrEmployeesRafP   , 
    nbrEmployeesRafC   , 
    contractId     , 
    basePlanId     , 
    groupOrPolicyNumber   , 
    planCoverageDescription  , 
    cobraGopn     , 
    cobraPcd     , 
    cobraCid     , 
    benefitId     , 
    insuranceStart    , 
    insuranceEnd    , 
    categoryId     ) 
    SELECT 
     f.matchKey     as matchKey     , 
     f.contributionP    as contributionP    , 
     f.stimulusContributionP  as stimulusContributionP  , 
     f.contributionC    as contributionC    , 
     f.ageMultiplier    as ageMultiplier    , 
     f.rateTableIdP    as rateTableIdP    , 
     f.rateTableIdC    as rateTableIdC    , 
     f.accountNbrP     as accountNbrP     , 
     f.accountNbrC     as accountNbrC     , 
     f.commissionExpenseAccount as commissionExpenseAccount , 
     f.commissionReceivableAccount as commissionReceivableAccount , 
     f.commissionType    as commissionType    , 
     f.commission     as commission     , 
     f.pmPm      as pmPm      , 
     f.fee       as fee       , 
     f.planAgeGroupIdP    as planAgeGroupIdP    , 
     f.planAgeGroupIdC    as planAgeGroupIdC    , 
     o.rafP      as rafP      , 
     o.rafC      as rafC      , 
     o.nbrEmployeesRafP   as nbrEmployeesRafP   , 
     o.nbrEmployeesRafC   as nbrEmployeesRafC   , 
     o.contractId     as contractId     , 
     o.basePlanId     as basePlanId     , 
     o.groupOrPolicyNumber   as groupOrPolicyNumber   , 
     o.planCoverageDescription  as planCoverageDescription  , 
     o.cobraGopn     as cobraGopn     , 
     o.cobraPcd     as cobraPcd     , 
     o.cobraCid     as cobraCid     , 
     o.benefitId     as benefitId     , 
     o.insuranceStart    as insuranceStart    , 
     o.insuranceEnd    as insuranceEnd    , 
     o.categoryId     as categoryId     , 
     NULL       as insuranceStart    , 
     NULL       as insuranceEnd    , 
     NULL       as categoryId      
    FROM 
     meCostingXPrePreFirstHalf f 
     INNER JOIN meCostingXPrePreOtherHalf o 
     ON f.matchKey = o.matchKey; 
/* Now it is safe to commit. */ 
COMMIT; 
2

誤った結果が得られた場合は、明らかにOracleのバグです。オラクル社カスタマ・サポート・センターにサポート・リクエストを記録しましたか、あなたが遭遇しているバグを特定しましたか(回避策がどこから来たのかは分かります)。

10.2.0.1を使用している場合、最新のパッチセット(おそらく10.2.0.4)を適用しようとしましたか?最初の10.2リリースと端末10.2リリースにはいくつかのバグ修正があります。 Oracleが修正したバグの場合は、一度だけのパッチもありますが、最新のパッチセットをインストールする必要があります。

+0

完璧な世界でいいですね。しかし、オラクルの技術サポートはあまり反応がなく、フォーラムの誰もアップグレードやパッチを除いて言いたくはありません。 –

+3

@Dragos - 最新のパッチセットを適用していない理由はありますか?古いリリースに固執したい人は、通常、より安定していると認識しているため、そうします。しかし、さまざまなバグを修正したパッチセットがリリースされているため、これらのパッチはより安定しています。パッチのない古いリリースを実行することは、私にとって非常に奇妙なようです。パッチセットを適用すると、多数のバグが排除され、トラブルシューティングが容易になります。 –

+0

@Justin - 私はパッチセットをダウンロードして追加します。 –

0

このようなクエリのSELECT部分​​を書き込もうとしましたか?同じ結果が返されるはずです。

これは2つのステップで動作します。まず、必要な最小値と最大値を計算し、次にNULL値の置換を行います。 (あなたのCASE文は、空の文字列とNULLがOracleで同じであるとは考えていないので、あまりに複雑すぎるようです)。

内部SELECTにすでに最大の結果が間違っているかどうかを知るためには、

SELECT 
    matchKey                as matchKey     , 
    NVL(contributionP    ,0)         as contributionP    , 
    NVL(stimulusContributionP  ,0)         as stimulusContributionP  , 
    NVL(contributionC    ,0)         as contributionC    , 
    NVL(ageMultiplier    ,0)         as ageMultiplier    , 
    NVL(rateTableIdP    ,0)         as rateTableIdP    , 
    NVL(rateTableIdC    ,0)         as rateTableIdC    , 
    NVL(accountNbrP     ,0)         as accountNbrP     , 
    NVL(accountNbrC     ,0)         as accountNbrC     , 
    NVL(commissionExpenseAccount ,0)         as commissionExpenseAccount , 
    NVL(commissionReceivableAccount ,0)         as commissionReceivableAccount , 
    NVL(commissionType    ,0)         as commissionType    , 
    NVL(commission     ,0)         as commission     , 
    NVL(pmPm      ,0)         as pmPm      , 
    NVL(fee       ,0)         as fee       , 
    NVL(planAgeGroupIdP    ,0)         as planAgeGroupIdP    , 
    NVL(planAgeGroupIdC    ,0)         as planAgeGroupIdC    , 
    NVL(rafP      ,0)         as rafP      , 
    NVL(rafC      ,0)         as rafC      , 
    NVL(nbrEmployeesRafP   ,0)         as nbrEmployeesRafP   , 
    NVL(nbrEmployeesRafC   ,0)         as nbrEmployeesRafC   , 
    CASE 
    WHEN maxContractId = 'No Contract No' THEN minContractId 
    ELSE maxContractId 
    END                 as contractId     , 
    NVL(basePlanId     ,0)         as basePlanId     , 
    CASE 
    WHEN maxGroupOrPolicyNumber = 'No Contract No' THEN minGroupOrPolicyNumber 
    ELSE maxGroupOrPolicyNumber 
    END                 as groupOrPolicyNumber   , 
    CASE 
    WHEN maxPlanCoverageDescription = 'No Contract No' THEN minPlanCoverageDescription 
    ELSE maxPlanCoverageDescription 
    END                 as planCoverageDescription  , 
    CASE 
    WHEN maxCobraGopn = 'No Contract No' THEN minCobraGopn 
    ELSE maxCobraGopn 
    END                 as cobraGopn     , 
    CASE 
    WHEN maxCobraPcd = 'No Contract No' THEN minCobraPcd 
    ELSE maxCobraPcd 
    END                 as cobraPcd     , 
    CASE 
    WHEN maxCobraCid = 'No Contract No' THEN minCobraCid 
    ELSE maxCobraCid 
    END                 as cobraCid     , 
    benefitId                as benefitId     , 
    NULL                 as insuranceStart    , 
    NULL                 as insuranceEnd    , 
    NULL                 as categoryId      
FROM ( 
    SELECT 
     matchKey               as matchKey     , 
     MAX(contributionP    )         as contributionP    , 
     MAX(stimulusContributionP  )         as stimulusContributionP  , 
     MAX(contributionC    )         as contributionC    , 
     MAX(ageMultiplier    )         as ageMultiplier    , 
     MAX(rateTableIdP    )         as rateTableIdP    , 
     MAX(rateTableIdC    )         as rateTableIdC    , 
     MAX(accountNbrP    )         as accountNbrP     , 
     MAX(accountNbrC    )         as accountNbrC     , 
     MAX(commissionExpenseAccount )         as commissionExpenseAccount , 
     MAX(commissionReceivableAccount)         as commissionReceivableAccount , 
     MAX(commissionType    )         as commissionType    , 
     MAX(commission     )         as commission     , 
     MAX(pmPm      )         as pmPm      , 
     MAX(fee      )         as fee       , 
     MAX(planAgeGroupIdP   )         as planAgeGroupIdP    , 
     MAX(planAgeGroupIdC   )         as planAgeGroupIdC    , 
     MAX(rafP      )         as rafP      , 
     MAX(rafC      )         as rafC      , 
     MAX(nbrEmployeesRafP   )         as nbrEmployeesRafP   , 
     MAX(nbrEmployeesRafC   )         as nbrEmployeesRafC   , 
     MIN(contractId     )         as minContractId    , 
     MAX(contractId     )         as maxContractId    , 
     MAX(basePlanId     )         as basePlanId     , 
     MIN(groupOrPolicyNumber  )         as minGroupOrPolicyNumber  , 
     MAX(groupOrPolicyNumber  )         as maxGroupOrPolicyNumber  , 
     MIN(planCoverageDescription )         as minPlanCoverageDescription , 
     MAX(planCoverageDescription )         as maxPlanCoverageDescription , 
     MIN(cobraGopn     )         as minCobraGopn    , 
     MAX(cobraGopn     )         as maxCobraGopn    , 
     MIN(cobraPcd     )         as mincobraPcd     , 
     MAX(cobraPcd     )         as maxcobraPcd     , 
     MIN(cobraCid     )         as minCobraCid     , 
     MAX(cobraCid     )         as maxCobraCid     , 
     MAX(benefitId     )         as benefitId     
    FROM meCostingXPrePrePre 
    GROUP BY matchKey 
); 
+0

おそらくGROUP BY式とすべての非統一集計関数が単一のデータベースブロックを超えている可能性があります。 http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/limits003.htm –

+0

上記は機能しませんでした。私の環境では、2倍の集約関数が結合されたGROUP BYは1つのDBブロックを上回ります。 –

関連する問題