Oracle - ORA-38101: 合并时 INSERT VALUES 子句中的列无效

Oracle - ORA-38101: Invalid column in the INSERT VALUES Clause on Merge

我正在尝试使用合并进行更新插入,但收到一条错误消息:Oracle - ORA-38101: Invalid column in the INSERT VALUES Clause on Merge: "MY_TABLE"."MYCOL2",甚至认为错误中指示的 table 和列名称是正确的。

declare
   var1 varchar2(50) := 'var1';
   var2 varchar2(50) := 'var2';

   procedure ins
      (mycol1 IN VARCHAR2,
       mycol2 IN VARCHAR2)
   is
   BEGIN
      LOOP
         BEGIN
        MERGE INTO my_table USING dual ON
        (     MYCOL1 = mycol1
          AND MYCOL2 = mycol2
        )
           WHEN MATCHED THEN UPDATE SET
              MYCOL1 = mycol1,
              MYCOL2 = mycol2
           WHEN NOT MATCHED THEN INSERT
              (MYCOL1, MYCOL2) 
                  VALUES ( mycol1, mycol2 );
                  EXIT; -- success? -> exit loop
         EXCEPTION
            WHEN NO_DATA_FOUND THEN -- the entry was concurrently deleted
               NULL; -- exception? -> no op, i.e. continue looping
            WHEN DUP_VAL_ON_INDEX THEN -- an entry was concurrently inserted
               NULL; -- exception? -> no op, i.e. continue looping
         END;
      END LOOP;
   END; 
begin
   ins (var1, var2);
end;
  • 不要使用与table的列名相同的变量名。

  • 您的 MATCHED 子句没有任何作用。

  • USING子句中,必须有评论中提到的一些查询。