Home » SQL & PL/SQL » SQL & PL/SQL » Merge statement (11g ,window7)
Merge statement [message #613066] Tue, 29 April 2014 06:34 Go to next message
maheshkumar93
Messages: 2
Registered: April 2014
Junior Member
while executing merge statement getting below exception.
ORA-30926: unable to get a stable set of rows in the source tables
Merge state ment:---
MERGE INTO CUSTOMER_DIM CD USING
    (SELECT Distinct
        -1 CUSTOMER_DIM_ID_SEQ    ,
        NVL( MCID, '$NULL') MCID         ,
        CUSTOMER_DIM_STAGE.CUST_TYPE CUST_TYPE     ,
        CUSTOMER_DIM_STAGE.CUST_ID   CUST_ID    ,
        Upper(PARENT_CUSTOMER_NAME) Parent_Customer_Name,
        NULL Customer_Name            ,
        SERVICE_PROVIDER_TYP             ,
        TREATMENT_DAY                    ,
        NULL PARENT_CUST_DIM_ID               ,
        DeCode(2, 2,
               Get_Collector_Cuid(CUST_TYPE, CUST_ID), COLLECTOR_CUID)
               cCOLLECTOR_CUID            ,
        Trunc( SYSDATE) CHANGE_DATE                 ,
        'RECORD UPDATED' CHANGE_NOTE_TXT    ,
        CUSTOMER_DIM_STAGE.DATA_PROCESS_SYS_NM    ,
        CUSTOMER_DIM_STAGE.BILLING_SOURCE_SYS_NM    ,
        2  SECURITY_GROUP_ID  ,
        'NEW' LAST_UPDATE_STATUS_CD        ,
        103677 BASE_PROCESS_CONTROL_ID
       From CDB_STAGE.CUSTOMER_DIM_STAGE
      Where CUSTOMER_DIM_STAGE.PROCESS_CONTROL_ID        = 111275        
        and CUST_TYPE is NOT NULL
        and CUST_ID is NOT NULL
        and MCID <> 'UNKNOWN'
    ) CDS
   ON ( NVL( CD.MCID,'$NULL')     = NVL( CDS.MCID ,'$NULL')
    and CD.CUST_TYPE         = CDS.Cust_Type
    and CD.CUST_ID         = CDS.Cust_Id )
   WHEN MATCHED
   THEN
    UPDATE SET CD.PARENT_CUSTOMER_NAME   =  CDS.Parent_Customer_Name   ,
           CD.SERVICE_PROVIDER_TYP   =  CDS.SERVICE_PROVIDER_TYP   ,
          --CD.TREATMENT_DAY            =  CDS.TREATMENT_DAY          ,
           CD.COLLECTOR_CUID         =  CDS.cCOLLECTOR_CUID        ,
           CD.SECURITY_GROUP_ID      =  CDS.SECURITY_GROUP_ID        ,
           CD.CHANGE_DATE            =  trunc (SYSDATE  )              ,
           CD.LAST_UPDATE_STATUS_CD  =  'CHG'                  ,
           CD.CHANGE_NOTE_TXT        =  'RECORD UPDATED'    ,
           CD.BASE_PROCESS_CONTROL_ID =  BASE_PROCESS_CONTROL_ID
   WHEN NOT MATCHED
   THEN INSERT
    (
    CD.CUSTOMER_DIM_ID          ,
    CD.DATA_PROCESS_SYS_NM      ,
    CD.BILLING_SOURCE_SYS_NM    ,
    CD.MCID                     ,
    CD.CUST_TYPE                ,
    CD.CUST_ID                  ,
    CD.PARENT_CUSTOMER_NAME     ,
    CD.SERVICE_PROVIDER_TYP     ,
    CD.CUSTOMER_NAME            ,
    CD.TREATMENT_DAY            ,
    CD.SECURITY_GROUP_ID        ,
    CD.PARENT_CUST_DIM_ID       ,
    CD.COLLECTOR_CUID           ,
    CD.CHANGE_DATE              ,
    CD.LAST_UPDATE_STATUS_CD    ,
    CD.CHANGE_NOTE_TXT          ,
    CD.BASE_PROCESS_CONTROL_ID
    )
    VALUES
    (
    Cust_Dim_Seq.NextVal        , --CDS.CUSTOMER_DIM_ID_SEQ    ,
    CDS.DATA_PROCESS_SYS_NM          ,
    CDS.BILLING_SOURCE_SYS_NM        ,
    CDS.MCID            ,
    CDS.CUST_TYPE            ,
    CDS.CUST_ID            ,
    CDS.PARENT_CUSTOMER_NAME    ,
    CDS.SERVICE_PROVIDER_TYP    ,
    CDS.CUSTOMER_NAME                ,
    CDS.TREATMENT_DAY        ,
    CDS.Security_Group_id        ,
    CDS.PARENT_CUST_DIM_ID           ,
    CDS.cCOLLECTOR_CUID               ,
    CDS.CHANGE_DATE                 ,
    CDS.LAST_UPDATE_STATUS_CD        ,
    CDS.CHANGE_NOTE_TXT             ,
    CDS.BASE_PROCESS_CONTROL_ID
    ) ;

please guide me where is the mistake........



[Edit MC: add code tags, do it yourself next time]

[Updated on: Tue, 29 April 2014 06:40] by Moderator

Report message to a moderator

Re: Merge statement [message #613068 is a reply to message #613066] Tue, 29 April 2014 06:42 Go to previous messageGo to next message
Michel Cadot
Messages: 68641
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

ORA-30926: unable to get a stable set of rows in the source tables
 *Cause:  A stable set of rows could not be got because of large dml
          activity or a non-deterministic where clause.
 *Action: Remove any non-deterministic where clauses and reissue the dml.

USING part returns more than one row for some rows of INTO table.

Re: Merge statement [message #613069 is a reply to message #613068] Tue, 29 April 2014 06:44 Go to previous messageGo to next message
maheshkumar93
Messages: 2
Registered: April 2014
Junior Member
in the merge statement we are using distinct
Re: Merge statement [message #613081 is a reply to message #613069] Tue, 29 April 2014 08:04 Go to previous message
cookiemonster
Messages: 13920
Registered: September 2008
Location: Rainy Manchester
Senior Member
That doesn't mean Michel's statement is wrong.
The distinct returns multiple rows with the same cust_type, cust_id and mcid.
Since the distinct applies to far more columns than just those three it should be obvious that it won't prevent the error.
Previous Topic: Oracle View doubt
Next Topic: oracle sql query
Goto Forum:
  


Current Time: Fri Apr 19 18:38:47 CDT 2024