首页 > 解决方案 > 合并oracle更新值但不插入,也不给出错误版本11g

问题描述

更新工作正常,但插入没有给出任何错误,也没有插入无法理解问题。

我要在其中插入/更新值的单个表

  MERGE INTO SOFT_FILENAME A
  USING (select TC, TC_DT, LASTNO
           FROM SOFT_FILENAME
          where TC = 'KMB'
            AND to_date(tc_dt,'dd-mon-yyyy') = to_date(sysdate,'dd-mon-yyyy')) B
  ON ( A.TC = 'KMB'  AND to_date(A.tc_dt,'dd-mon-yyyy') = to_date(sysdate,'dd-mon-yyyy') AND A.TC_DT = B.TC_DT AND A.TC = B.TC)

  when matched then

    UPDATE
       SET A.LASTNO = A.LASTNO + 1
     WHERE A.TC = 'KMB'
       AND to_date(A.tc_dt,'dd-mon-yyyy') = to_date(sysdate,'dd-mon-yyyy')


  WHEN NOT MATCHED THEN

    INSERT (A.TC, A.TC_DT, A.LASTNO) VALUES ('KMB', to_date(sysdate,'dd-mon-yyyy'), 1);

表脚本

create table A
(
  TC     CHAR(3),
  TC_DT  DATE,
  LASTNO NUMBER(6)
)

使用过程实现此目的的替代方法如下,但我不想调用过程。以下是我想要使用合并实现的目标。

begin
  select count(1)
    into cou  
    FROM SOFT_FILENAME
   where TC = V_TC
     AND to_date(tc_dt, 'dd-mon-yyyy') = to_date(sysdate, 'dd-mon-yyyy');
  if (cou = 0) then
    INSERT into SOFT_FILENAME A
      (A.TC, A.TC_DT, A.LASTNO)
    VALUES
      (V_TC, sysdate, 1);
  else
    UPDATE SOFT_FILENAME A
       SET A.LASTNO = A.LASTNO + 1
     WHERE A.TC = V_TC
       AND
       to_date(A.tc_dt, 'dd-mon-yyyy') =
           to_date(sysdate, 'dd-mon-yyyy'); 
  end if;
end

标签: sqloracleoracle11gsql-merge

解决方案


推荐阅读