ORA-38101: Invalid column in the INSERT VALUES Clause

解决方案 »

  1.   

    你语句写错了吧,把你的SQL贴出来。或者看我空间,加我Q
      

  2.   


    --参考:
    merge into table_a a
    using table_b b
    on(a.id=b.id)
    when matched then
         update
         set a.col_1=b.col_1
             a.col_2=b.col_2
    when not matched then
         insert (a.col_1,a.col_2)
         values (b.col_1,b.col_2);
      

  3.   

    注意:两表的连接条件(比如上面的id列)是不能update的
      

  4.   

    语句如下,请帮忙看下,多谢各位啦。
    MERGE INTO BILL.T_BY_DISCT a
      USING (
        SELECT BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS from wcl.T_by) b
      ON (a.BY_SEQ = b.BY_SEQ)
      WHEN MATCHED THEN
        UPDATE SET a.BY_SEQ=b.BY_SEQ,a.USER_NAME=b.USER_NAME,a.ACCOUNT_ID=b.ACCOUNT_ID,a.SI_EXTERNAL_ID=b.SI_EXTERNAL_ID,a.BY_MIN=b.BY_MIN,a.BY_MAX=b.BY_MAX,a.BY_PRECENT=b.BY_PRECENT,a.BY_TYPE=b.BY_TYPE,a.BY_LEVEL=b.BY_LEVEL,
        a.STATUS=b.STATUS,a.CREATE_DATE=b.CREATE_DATE,a.END_DATE=b.END_DATE,a.BY_OBJECT_ID=b.BY_OBJECT_ID,a.CREATE_STAFF=b.CREATE_STAFF,a.FEE_NBR=b.FEE_NBR,a.STATUS_CHG_DATE=b.STATUS_CHG_DATE,a.COMMENTS=b.COMMENTS
      WHEN NOT MATCHED THEN
        INSERT (BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS)
        VALUES (BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS);
      

  5.   

      UPDATE
         SET a.BY_SEQ          = b.BY_SEQ,
    用于连接的字段不能做更新,可以参考:
    http://www.idb-stock.net/idb/2011/05/30/147.html
    http://www.idb-stock.net/idb/2011/05/30/146.html