Error in MERGE Statament

I have scenario where i have to insert some columns in to target according to value in intgrt_src_trx_cd in source table and that column (intgrt_src_trx_cd ) is not ther in target table
I wrote code as below, but i am getting an error
Error report:
SQL Error: ORA-38101: Invalid column in the INSERT VALUES Clause: "WRK"."PRM_ADR_LN_1"
38101. 00000 - "Invalid column in the INSERT VALUES Clause: %s"
*Cause:    INSERT VALUES clause refers to the destination table columns
*Action:
MERGE /*+ PARALLEL APPEND */
INTO DWT00007_IMC_DMS_CNTAC_WRK WRK
USING (SELECT IMC_KEY_NO,
inmkt_prm_st_prov_cd,
inmkt_prm_st_prov_desc,
inmkt_prm_postl_cd,
inmkt_prm_adr_cntry_cd,
inmkt_prm_adr_cntry_nm,
inmkt_prm_city_nm,
INMKT_PRM_ADR_1_DESC,
INMKT_PRM_ADR_2_DESC,
INMKT_PRM_ADR_3_DESC,
INMKT_PRM_ADR_4_DESC,
intgrt_src_trx_cd
FROM DWSSTG01.awt20020_dms_adr
WHERE TABLE_NO = 1) STAGE
ON (WRK.IMC_KEY_NO = STAGE.IMC_KEY_NO)
WHEN MATCHED
THEN
UPDATE SET
WRK.PRM_STATE_CD = STAGE.inmkt_prm_st_prov_cd,
WRK.PRM_STATE = STAGE.inmkt_prm_st_prov_cd,
WRK.PRM_POST_CODE = STAGE.inmkt_prm_postl_cd,
WRK.PRM_COUNTRY_CD = STAGE.inmkt_prm_adr_cntry_cd,
WRK.prm_country = STAGE.inmkt_prm_adr_cntry_nm,
WRK.prm_city = STAGE.inmkt_prm_city_nm,
WRK.PRM_ADR_LN_1 = CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_1 ELSE STAGE.INMKT_PRM_ADR_1_DESC END,
WRK.PRM_ADR_LN_2 = CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_2 ELSE STAGE.INMKT_PRM_ADR_2_DESC END,
WRK.PRM_ADR_LN_3 = CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_3 ELSE STAGE.INMKT_PRM_ADR_3_DESC END,
WRK.PRM_ADR_LN_4 = CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_4 ELSE STAGE.INMKT_PRM_ADR_4_DESC END
WHEN NOT MATCHED
THEN
INSERT (WRK.IMC_KEY_NO,
WRK.PRM_STATE_CD,
WRK.PRM_STATE,
WRK.PRM_POST_CODE,
WRK.PRM_COUNTRY_CD,
WRK.prm_country,
WRK.prm_city,
WRK.PRM_ADR_LN_1,
WRK.PRM_ADR_LN_2,
WRK.PRM_ADR_LN_3,
WRK.PRM_ADR_LN_4)
VALUES (STAGE.IMC_KEY_NO,
STAGE.inmkt_prm_st_prov_cd,
STAGE.inmkt_prm_st_prov_desc,
STAGE.inmkt_prm_postl_cd,
STAGE.inmkt_prm_adr_cntry_cd,
STAGE.inmkt_prm_adr_cntry_nm,
STAGE.inmkt_prm_city_nm,
CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_1 ELSE STAGE.INMKT_PRM_ADR_1_DESC END,
CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_2 ELSE STAGE.INMKT_PRM_ADR_2_DESC END,
CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_3 ELSE STAGE.INMKT_PRM_ADR_3_DESC END,
CASE WHEN stage.INTGRT_SRC_TRX_CD = 'D' THEN WRK.PRM_ADR_LN_4 ELSE STAGE.INMKT_PRM_ADR_4_DESC END);
Can anyone say what the problem is and how cani modify it?
Edited by: user10390682 on Jan 14, 2010 8:33 AM

Hi,
Maybe something like:
merge into dwt00007_imc_dms_cntac_wrk wrk
     using (select imc_key_no
                  ,inmkt_prm_st_prov_cd
                  ,inmkt_prm_st_prov_desc
                  ,inmkt_prm_postl_cd
                  ,inmkt_prm_adr_cntry_cd
                  ,inmkt_prm_adr_cntry_nm
                  ,inmkt_prm_city_nm
                  ,intgrt_src_trx_cd
                  ,inmkt_prm_adr_1_desc
                  ,inmkt_prm_adr_2_desc
                  ,inmkt_prm_adr_3_desc
                  ,inmkt_prm_adr_4_desc
              from dwsstg01.awt20020_dms_adr
             where table_no = 1) stage
        on (wrk.imc_key_no = stage.imc_key_no)
when matched
then
   update set
      wrk.prm_state_cd = stage.inmkt_prm_st_prov_cd
     ,wrk.prm_state = stage.inmkt_prm_st_prov_cd
     ,wrk.prm_post_code = stage.inmkt_prm_postl_cd
     ,wrk.prm_country_cd = stage.inmkt_prm_adr_cntry_cd
     ,wrk.prm_country = stage.inmkt_prm_adr_cntry_nm
     ,wrk.prm_city = stage.inmkt_prm_city_nm
     ,wrk.prm_adr_ln_1 =
         case stage.intgrt_src_trx_cd
            when 'D' then wrk.prm_adr_ln_1
            else stage.inmkt_prm_adr_1_desc
         end
     ,wrk.prm_adr_ln_2 =
         case stage.intgrt_src_trx_cd
            when 'D' then wrk.prm_adr_ln_2
            else stage.inmkt_prm_adr_2_desc
         end
     ,wrk.prm_adr_ln_3 =
         case stage.intgrt_src_trx_cd
            when 'D' then wrk.prm_adr_ln_3
            else stage.inmkt_prm_adr_3_desc
         end
     ,wrk.prm_adr_ln_4 =
         case stage.intgrt_src_trx_cd
            when 'D' then wrk.prm_adr_ln_4
            else stage.inmkt_prm_adr_4_desc
         end
when not matched
then
   insert            (imc_key_no
                     ,prm_state_cd
                     ,prm_state
                     ,prm_post_code
                     ,prm_country_cd
                     ,prm_country
                     ,prm_city
                     ,prm_adr_ln_1
                     ,prm_adr_ln_2
                     ,prm_adr_ln_3
                     ,prm_adr_ln_4)
       values (stage.imc_key_no
              ,stage.inmkt_prm_st_prov_cd
              ,stage.inmkt_prm_st_prov_desc
              ,stage.inmkt_prm_postl_cd
              ,stage.inmkt_prm_adr_cntry_cd
              ,stage.inmkt_prm_adr_cntry_nm
              ,stage.inmkt_prm_city_nm
              ,stage.inmkt_prm_adr_1_desc
              ,stage.inmkt_prm_adr_2_desc
              ,stage.inmkt_prm_adr_3_desc
              ,stage.inmkt_prm_adr_4_desc); Not tested of course.
Edit:
Maybe I'm getting you right, the following seems to be a contradiction of what you are actually tried so far
So whenever INTGRT_SRC_TRX_CD = 'D' then i have to keep all target column values except 4 columns which are
1. DWT00007_IMC_DMS_CNTAC.PRM_ADR_LN_1
2. DWT00007_IMC_DMS_CNTAC.PRM_ADR_LN_2
3. DWT00007_IMC_DMS_CNTAC.PRM_ADR_LN_3
4. DWT00007_IMC_DMS_CNTAC.PRM_ADR_LN_4
for those 4 columns i have to write something like this
case when INTGRT_SRC_TRX_CD = 'D' THEN target.column ELSE stage.columnNow I read as Address columns are the only columns that you want to update
Regards
Peter
Edited by: Peter on Jan 14, 2010 10:39 AM
- Added my confusion

Similar Messages

  • Getting an error in MERGE statement

    Hi,
    I am getting an error "missing keyword" when I execute the MERGE statement.
    Here I have attached copy of MERGE statement which I am trying to execute.
    (My requirement is if I find matching record then insert again it's a business requirement. And if not then set flag)
    MERGE INTO t1
    USING t2
    ON (conditions)
    WHEN MATCHED THEN
    INSERT (column list from t1)
    VALUES (from t2)
    WHEN NOT MATCHED THEN
    UPDATE
    SET ... ;
    Can someone guide me?
    Thanks,

    This is why I told you yesterday in this thread...
    Need suggestion in MERGE Statement
    ...that what you're asking is the opposite of the way MERGE works.
    Guess you didn't want to believe me.

  • Error in MERGE statement - ORA-00969: missing ON keyword

    Hi All ,
    I am trying to write a Merge statement , but I am getting the below error .
       MERGE  INTO main_table m
                              USING  tab_1 l, tab_2 u
                              ON  (   l.col1        =  m.col1
                                       AND u.col2 = l.col2)
    When Matched then
    update........
    When not mached then
    Insert  ...... 
    But here I am using 2 tables in the USING clause . and here I am getting  this error :-
    142/17   PL/SQL: SQL Statement ignored
    143/42   PL/SQL: ORA-00969: missing ON keyword
    May I know where i am doing wrong ?

    Hi LuKKa, you are on the Portugues Forum, but we can help you, try the code mentioned below:
       MERGE  INTO main_table m
                              USING  (select l.col1, l.col2, u.col2 from tab_1 l join tab_2 u on (u.col2 = l.col2)) t
                              ON  (t.col1 =  m.col1)
    When Matched then
    update........
    When not mached then
    Insert  ......  
    Regards.

  • Invalid Number Error in Merge Statement

    Hi all.
    I got an invalid number error in the following merge statement, but I don't know why. Maybe you can give me a hint.
    MERGE INTO wam_table
    USING (SELECT * FROM wam_table) b
    ON (b.username = 'user'
    AND b.mod = 'module'
    AND b.trimester = '1')
    WHEN MATCHED THEN
    UPDATE SET as = '1', ad = '1', co = '1', pr = '1', date = localtimestamp, lus = 'username'
    WHEN NOT MATCHED THEN
    INSERT VALUES ('user','module','1','1','1','1','1', localtimestamp, 'username');
    The invalid number error appears in the first line, but I don't know why?
    Stephan

    UPDATE SET as = '1', ad = '1', co = '1', pr = '1', date = localtimestamp, lus = 'username'SELECT * FROM sys.v_$reserved_words;
    SQL> create table test1(as varchar2(10));
    create table test1(as varchar2(10))
    ERROR at line 1:
    ORA-00904: : invalid identifier
    SQL> create table test1(sno number, date date);
    create table test1(sno number, date date)
    ERROR at line 1:
    ORA-00904: : invalid identifier
    SQL> create table test1("as" varchar2(10));
    Table created.
    SQL>
    SQL> create table test2(sno number, "date" date);
    Table created.
    SQL> desc test1
    Name                                      Null?    Type
    as                                                 VARCHAR2(10)
    SQL> desc test2
    Name                                      Null?    Type
    SNO                                                NUMBER
    date                                               DATE
    SQL> 

  • Error in Merge statement for Oracle 10gR2

    Hi,
    When I use the MERGE statement to copy data across a database link (from 10gR2 to 10gR2 database), if I have both an update and insert clause it works fine, but if I omit the insert clause and have just update on its own, I get error "ORA-02064: distributed operation not supported".
    Can anyone help on this

    This came up in a thread last week, the 10g versions of MERGE (without INSERT or with DELETE) did not appear to work over DB links.

  • Can u rectify the error  in merge statement in sql

    hi to all,
    i had created a duplicate table of emp with the name of copy_emp with no records.
    by using merge statement i want to update the existing rows and insert new rows into copy_emp table as follows ......
    merge into copy_emp c
    using emp e
    on(c.empno=e.empno) --------> here the error is ........ invalid column name
    when matched then
    update set c.empno=e.empno,.....
    when not matched then
    insert values(e.empno,e.job,e.sal........);

    merge into copy_emp c
    using emp e
    on(c.empno=e.empno) --------> here the error is ........ invalid column name
    when matched then
    update set c.ename=e.ename,.....
    when not matched then
    insert values(e.empno,e.job,e.sal........);
    take off empno from update clause.

  • Error in merge statement

    MERGE INTO table_a
       USING (SELECT table_a.ROWID row_id, table_2.format_a
       FROM table_2
       WHERE table_2.sales_class = sales_class) src
       ON ( table_1.ROWID = src.row_id )
       WHEN MATCHED THEN UPDATE SET FORMAT = src.format_a;while executing the above code i am getting an error
    SQL Error: ORA-00904: "TT_PRODUCT_INFO_PIMS"."ROWID": invalid identifier
    00904. 00000 -  "%s: invalid identifier"
    *Cause:   
    *Action:how to solve this error ?

      Merge Into Tt_Product_Info_Pims
       USING (SELECT a.ROWID row_id, a.category, b.mat_type_code, CASE
       When ( Select Distinct 1
        FROM sfs_prod_matrix_t D Where D.Isbn = Tt_Product_Info_Pims.Isbn ------GETTING ERROR here -- ----"
            --"Tt_Product_Info_Pims.isbn INVALID IDENTIFIER"
                        AND D.smpl_yr = 19 ) = 1 THEN 'Y'
       ELSE 'N'
          END AS pos_4, c.est_flag_cost, c.est_flag_price, CASE
       WHEN isbn_price = 0
         OR isbn_price IS NULL THEN c.isbn_price
       ELSE isbn_price
          END AS pos_7, CASE
       WHEN isbn_cost = 0
         OR isbn_cost IS NULL THEN c.isbn_cost
       ELSE isbn_cost
          END AS pos_8
       FROM Demand.program_t a ,Demand.pgt_t b ,Demand.product_t c
       WHERE a.cmpy_id = b.cmpy_id
         AND a.discipline = b.discipline
         AND a.prod_grp = b.prod_grp
         AND a.cpy_yr = b.cpy_yr
         AND a.cmpy_id = c.cmpy_id
         AND a.discipline = c.discipline
         AND a.prod_grp = c.prod_grp
         AND a.cpy_yr = c.cpy_yr
         AND b.prod_type = c.prod_type
         AND c.isbn = isbn) src
       On ( Tt_Product_Info_Pims.Rowid = Src.Row_Id )
       WHEN MATCHED THEN UPDATE SET category = src.category;
    {code}
    is it necessary to include Tt_Product_Info_Pims table inside the select clause                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • Error in merge statement when trying to impliment SCD type 2 using merge...

    Hi ,
    I'm trying to impliment SCD type 2 using Merge using below blog as reference but sime how it is erroring out with error
    http://www.made2mentor.com/2013/08/how-to-load-slowly-changing-dimensions-using-t-sql-merge/
    Msg 207, Level 16, State 1, Line 40
    Invalid column name 'Current'.
    Msg 207, Level 16, State 1, Line 38
    Invalid column name 'Current'.
    Msg 207, Level 16, State 1, Line 47
    Invalid column name 'Current'.
    Here is the code below...
    --Create Temporaty table to hold dimension records
    IF OBJECT_ID('tempdb..#DimVirtualQueue') IS NOT NULL
    DROP TABLE #DimVirtualQueue;
    CREATE TABLE #DimVirtualQueue
    ( [VQ_name] [varchar](50) NULL,
    [contact_type] [varchar](50) NULL,
    [center_node_id] [int] NULL,
    [sed_id] [datetime] NULL,
    [eed_id] [datetime] NULL,
    [insert_date] [datetime] NULL,
    [Current] [char](1) NOT NULL
    INSERT INTO #DimVirtualQueue(VQ_name, contact_type, center_node_id, sed_id, eed_id, insert_date,[Current] )
    SELECT VQ_name, contact_type, center_node_id, sed_id , eed_id,GETDATE(),'Y'
    FROM
    ( --Declare Source and Target tables.
    MERGE dbo.tblSwDM_dim_VQ_test AS TARGET
    --Source
    USING (SELECT
    RTRIM(LTRIM(Stage.RESOURCE_NAME)) AS VQ_name,
    'Unknown' AS contact_type,
    0 AS center_node_id,
    CONVERT(INT,CONVERT(VARCHAR(8),GMT_START_TIME,112)) AS sed_id,
    CONVERT(INT,CONVERT(VARCHAR(8),ISNULL(GMT_END_TIME,'2070-01-01'),112)) AS eed_id,
    GETDATE() AS insert_date
    FROM dbo.tblGenesys_stg_RESOURCE_ Stage
    WHERE resource_type = 'queue'
    AND resource_subtype = 'VirtualQueue'
    AND NOT EXISTS (SELECT 1 FROM dbo.tblSwDM_dim_VQ AS dim
    WHERE RTRIM(LTRIM(stage.RESOURCE_NAME)) = RTRIM(LTRIM(dim.vq_name))) ) SOURCE
    ON TARGET.VQ_name = SOURCE.VQ_name
    WHEN NOT MATCHED BY TARGET
    THEN
    INSERT ( VQ_name, contact_type, center_node_id, sed_id, eed_id, insert_date,[Current] )
    VALUES (SOURCE.VQ_name,SOURCE.contact_type,SOURCE.center_node_id,SOURCE.sed_id,SOURCE.eed_id,SOURCE.insert_date,'Y')
    WHEN MATCHED AND TARGET.[Current] = 'Y'
    AND EXISTS (
    SELECT SOURCE.VQ_name
    EXCEPT
    SELECT TARGET.VQ_name
    --Expire the records in target if exist in source.
    THEN UPDATE SET TARGET.[Current] = 'N',
    TARGET.[eed_id] = SOURCE.eed_id
    OUTPUT $Action ActionOut, SOURCE.VQ_name,SOURCE.contact_type,SOURCE.center_node_id,SOURCE.sed_id,SOURCE.eed_id) AS MergeOut
    WHERE MergeOut.ActionOut = 'UPDATE';
    --Insert data into dimension
    INSERT tblSwDM_dim_VQ_test
    SELECT VQ_name,contact_type,center_node_id,sed_id,eed_id,insert_date,[Current] FROM #DimVirtualQueue
    Any help to resolve issue is appreciated...
    Thanks,
    Vishal..

    You need to show the DDL of your target table: dbo.tblSwDM_dim_VQ_test.
    Do you have a column named [Current] in this table?

  • Indivual error recording in Merge Statement !!!!

    Is it possible to record indivudual error in MERGE statement (Update / Insert).
    I am unable to record those error. instead of MERGE if I update table in the cursor loop then I am able to record individual error but the process is time consuming.
    Thanks in advance.
    Deba

    Hi Deba,
    DML Error Logging:
    SQL> create table tab1 (x number(1));
    Table created.
    SQL> exec dbms_errlog.create_error_log('tab1')
    PL/SQL procedure successfully completed.
    SQL>
    SQL> merge into tab1 t
      2        using (select 1 x from dual union all
      3               select 112 x from dual) s
      4  on (t.x = s.x)
      5  when not matched
      6  then insert (x) values (s.x)
      7  log errors into err$_tab1 reject limit unlimited;
    1 row merged.
    SQL>
    SQL> COL x for 9999
    SQL> select * from tab1;
        X
        1
    SQL> COL x for a4
    SQL> select ora_err_number$, X from err$_tab1;
    ORA_ERR_NUMBER$ X
               1438 112
    SQL>Regards
    Peter

  • Problem in merge statement -ORA-27432 Step does not exist for chain

    Hi
    I m getting ORA-27432 Step does not exist for chain error in merge statement.Please explain the same.
    MERGE INTO fos.pe_td_hdr_sd B
    USING (
             SELECT ACTIVE, ADDUID, ADDUIDTIME,TDKEY         FROM pe.pe_td_hdr
              WHERE  (adduidtime like '20070104%' or edituidtime like '20070104%')
              AND NVL(legacy_td,'N')<>'Y'
              AND SUBSTR(adduidtime,1,4)='2007'
              AND AMENDMENT_NO=0)A ON ( B.TDKEY = A.TDKEY)
      WHEN MATCHED THEN
        UPDATE SET B.ACTIVE=A.ACTIVE,
    B.ADDUID=A.ADDUID,
            B.ADDUIDTIME=A.ADDUIDTIME
      WHEN NOT MATCHED THEN
                      INSERT
                              B.ACTIVE,
                              B.ADDUID,
                              B.ADDUIDTIME)
                        VALUES(
                              A.ACTIVE,
                              A.ADDUID,
                              A.ADDUIDTIME)This query is a short version of the main query.It is same but having 180 columns in original table.

    What version of Oracle are you using? This message does not appear in my 10.1 Error Messages document, but the other messages in that range seem to be about DBMS_SCHEDULER.
    Are you using scheduler somewhere around where you are getting the error message?
    John

  • Error executing a stored procedure from SSIS using the MERGE statement between databases

    Good morning,
    I'm trying to execute from SSIS a stored procedure that compares the content of two tables on different databases in the same server and updates one of them. To perform this action, I've created a stored procedure in the destination database and I'm
    comparing the data between tables with the MERGE statement. When I execute the procedure on the destination database the error that I obtain is:
    "Msg 916, Level 14, State 1, Procedure RefreshDestinationTable, Line 13
    The server principal "XXXX" is not able to access the database "XXXX" under the current security context."
    Some things to take in account:
    1. I've created a temporary table on the same destination database to check if the problem was on the MERGE statement and it works fine.
    2. I've created the procedure with the option "WITH EXECUTE AS DBO".
    I've read that it can be a problem of permissions but I don't know if I'm executing the procedure from SSIS to which user/login I should give permissions and which.
    Could you give me some tip to continue investigating how to solve the problem?
    Thank you,
    Virgilio

    Read Erland's article http://www.sommarskog.se/grantperm.html
    Best Regards,Uri Dimant SQL Server MVP,
    http://sqlblog.com/blogs/uri_dimant/
    MS SQL optimization: MS SQL Development and Optimization
    MS SQL Consulting:
    Large scale of database and data cleansing
    Remote DBA Services:
    Improves MS SQL Database Performance
    SQL Server Integration Services:
    Business Intelligence

  • Error while using Merge statement

    Hi,
    Can any one please look at the merge statement and help me understand the error.Thanks in advance.
    MERGE /*+ APPEND */
    INTO intf_lpa_master m
    USING (SELECT std_district_student_id,
    std_grade_code,
    sub_test,
    test_date,
    performance_lvl_code,
    test_lang_code,
    v_student_id,
    v_test_id,
    v_lang_cd,
    v_plc,
    valid_test_date,
    -- school_year,
    -- school_id,
    valid_src_stu_id,
    test_code
    FROM intf_lpa_master_vw
    MINUS
    SELECT std_district_student_id,
    std_grade_code,
    sub_test,
    test_date,
    performance_lvl_code,
    test_lang_code,
    v_student_id,
    v_test_id,
    v_lang_cd,
    v_plc,
    valid_test_date,
    -- school_yr,
    -- school_id,
    valid_src_stu_id,
    test_code
    FROM intf_lpa_master
    WHERE active_flag = 'Y') v
    ON ( m.std_district_student_id = v.std_district_student_id
    AND m.sub_test = v.sub_test
    AND m.test_date = v.test_date)
    WHEN MATCHED
    THEN
    UPDATE SET m.std_grade_code = v.std_grade_code,
    m.performance_lvl_code = v.performance_lvl_code,
    m.test_lang_code = v.test_lang_code,
    m.active_flag = 'Y', -- if we are touching this record, it is to be active.
    m.error_message = NULL, -- refresh these, to properly reconsider records.
    m.create_date = SYSDATE,
    m.record_id = intf_lpa_master_seq.NEXTVAL,
    m.process_row = 'U',
    m.last_update_date = SYSDATE,
    m.last_update_user = 'PRE_PROCESS_LPA - UPDATE',
    -- m.job_id = c_run_id ,
    m.validation_step = NULL, -- refresh these, to properly reconsider records.
    m.v_student_id = v.v_student_id,
    m.v_test_id = v.v_test_id,
    m.v_lang_cd = v.v_lang_cd,
    m.v_plc = v.v_plc,
    m.valid_test_date = v.valid_test_date,
    -- m.school_year = v.schloo_year,
    -- m.school_id = v.school_id,
    m.valid_src_stu_id = v.valid_src_stu_id,
    m.test_code = v.test_code
    WHEN NOT MATCHED
    THEN
    INSERT (
    m.std_district_student_id,
    m.std_grade_code,
    m.sub_test,
    m.test_date,
    m.performance_lvl_code,
    m.test_lang_code,
    m.active_flag,
    m.error_message,
    m.create_date,
    m.record_id,
    m.process_row,
    m.last_update_date,
    m.last_update_user,
    -- m.job_id,
    m.validation_step,
    m.v_student_id,
    m.v_test_id,
    m.v_lang_cd,
    m.v_plc,
    m.valid_test_date,
    -- m. school_year,
    -- m. school_id,
    m.valid_src_stu_id,
    m.test_code)
    VALUES (
    v.std_district_student_id,
    v.std_grade_code,
    v.sub_test,
    v.test_date,
    v.performance_lvl_code,
    v.test_lang_code,
    'Y',
    NULL,
    SYSDATE,
    intf_lpa_master_seq.NEXTVAL,
    'I',
    SYSDATE,
    'PRE_PROCESS_LPA - INSERT',
    -- c_run_id,
    NULL,
    v.v_student_id,
    v.v_test_id,
    v.v_lang_cd,
    v.v_plc,
    v.valid_test_date,
    -- v. school_year,
    -- v. school_id,
    v.valid_src_stut_id,
    v.test_code);
    Error Message :
    ORA-06553 : PLS-306:wrong number or types of arguments in call to 'V'

    There are a couple of thngs wrong here. In the when matched insert column list, you cannot qualify the field name with the table alias. It should be just:
    insert (std_district_student_id, std_grade_code, sub_test ...)Are v_student_id, v_test_id, v_lang_cd, and v_plc really columns in the intf_lpa_master table? I am more used to seeing v_name as a variable naming convention than a column name, but I could be wrong.
    John

  • Merge Statement Giving Error

    Hi Everyone,
    I am trying to use MERGE statement for my Data Load. But it is giving out an un-understandable error. It In the "ON" Part, it refuses to recognise the destination table columns...
    like I say ON(dest.Per_No = Src.Per_No), and it says "Invalid Identifier dest.Per_No"
    Any Ideas, am pasting shortened version of my SQL:
    ========================================
    SQL> ed
    Wrote file afiedt.buf
    1 MERGE INTO CIPIC.Dest P
    2 USING (SELECT Src1.ROW_ID AS PER_No,
    3 LTRIM(Src2.PARTY_ID,'0') AS ARN,
    4 ....
    9 FROM Src1,Src2,....
    12 WHERE MANY JOINS GO HERE) S
    16 ON (P.PER_No = S.PER_No AND P.A_Column = S.A_Column)
    17 WHEN MATCHED THEN UPDATE SET P.blah = S.blah1
    24 WHEN NOT MATCHED THEN INSERT (PER_No, A_Column,....)
    26 VALUES (S.PER_No, .A_Column, ......)
    SQL> /
    ON (P.PER_No = S.PER_No AND P.A_Column = S.A_Column)
    ERROR at line 16:
    ORA-00904: "P"."PER_No": invalid identifier

    See here
    http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_915a.htm#2080942
    >
    Restrictions on Updating a View
    You cannot specify DEFAULT when updating a view.
    You cannot update a column that is referenced in the ON condition clause.
    Rgds.

  • Error logging in merge statement

    how to handle error logging in merge statement??
    thanks in advance!!!

    Welcome to the forum!
    Whenever you post please provide your 4 digit Oracle version (result of SELECT * FROM V$VERSION).
    >
    how to handle error logging in merge statement??
    >
    Do it the way the documentation tells you to.
    See the error_logging_clause of the MERGE statement in the SQL Language doc
    http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm
    It contains an example of using error logging with MERGE
    >
    error_logging_clause
    The error_logging_clause has the same behavior in a MERGE statement as in an INSERT statement. Refer to the INSERT statement error_logging_clause for more information.
    See Also:
    "Inserting Into a Table with Error Logging: Example"

  • Oracle 9.2i - Log Errors in a Merge Statement

    Hi all,
    I want to log errors in a merge statement in way to allow the statement to finish without rollback. I see that in Oracle 10g2 it is possible with "LOG ERRORS INTO err$_dest ('MERGE') REJECT LIMIT UNLIMITED;" instruction but, apparently, it's not possible in Oracle 9.2i.
    Is there another way to solve this problem?

    Depending on what type of errors you expect, you may be helped by deferring your constraints: unique, foreign key and check constraints can be deferred; that means they are only enforced when you commit.
    You could defer all constraints, perform the bulk insert and then instead of committing you first try to set all constraints to immediate. If this fails, there are errors. If it does not, you can commit.
    To find the exact errors, you can try to switch all deferred constraints back to immediate one by one. The ones that succeed are not violated by your transaction, oinly the ones that fail to switch to immediate are not met by your transaction.
    For the violated constraints, you can find the offending records by simply selecting them. For example if the check constraint states Col X + Col Y < 10000 you will find the offending records by selecting all records where not (Col X + Col Y < 10000 ). Unfortunately we have no better mechanism than this for finding the records that are in violation of the rules.
    best regards
    Lucas

Maybe you are looking for