Sql Oracle合并语句未到达不匹配的部分

Sql Oracle合并语句未到达不匹配的部分,sql,oracle,sql-merge,Sql,Oracle,Sql Merge,下面的Merge语句没有插入(将不匹配)记录 Merge子句的条件部分中使用的查询有时不会返回任何行 这是否导致插入不发生 MERGE INTO apps.test_table ab USING (SELECT batch_id FROM apps.test_table WHERE session_name='session_name' AND status ='NOT STARTED' )b ON (ab.batch_id=b.batch_id) WHEN MATCHED THE

下面的Merge语句没有插入(将不匹配)记录

Merge子句的条件部分中使用的查询有时不会返回任何行

这是否导致插入不发生

MERGE INTO apps.test_table ab USING
(SELECT batch_id
FROM apps.test_table
WHERE session_name='session_name'
AND status        ='NOT STARTED'
)b ON (ab.batch_id=b.batch_id)
WHEN MATCHED THEN
  UPDATE
  SET STATUS         ='RUNNING',
    tag_receive_time = sysdate,
    sess_start_time  = SYSDATE,
    wflw_start_time  = sysdate
  WHERE batch_id     = b.batch_id 
WHEN NOT MATCHED THEN
  INSERT
    (
      ab.batch_id,
      ab.status,
      ab.workflow_name,
      ab.session_name,
      ab.source_name,
      ab.target_table,
      ab.created_by,
      ab.creation_date,
      ab.snapshot_date,
      ab.tag_receive_time,
      ab.sess_start_time,
      ab.wflw_start_time
    )
    VALUES
    (
      apps.batch_id_seq.nextval,
      'RUNNING',
      '$PMWorkflowName',
      '$PMSessionName',
      'AMPS',
      'SPARES_F_ORDER_SHIPMENT_DTL',
      'Informatica',
      SYSDATE,
      SYSDATE,
      SYSDATE,
      SYSDATE,
      SYSDATE
    )
    ; 

分解查询以查看结果。运行并检查以下查询结果选择查询:

SELECT batch_id FROM apps.test_table WHERE session_name='session_name' AND 
status ='NOT STARTED'
上述查询的列
batch\u id
结果包含在表
apps中。test\u table
或not如果不是,则应插入表
apps中。test\u table
否则您的
Update
语句将起作用


不需要从
更新
中删除
其中batch\u id=b.batch\u id

您已经在(ab.batch\u id=b.batch\u id)
上的
中检查了Update语句的匹配情况,然后需要在Update语句之后删除
其中batch\u id=b.batch\u id

你可以查一下 out,作为示例语法,其中 两个Update语句都不包含where子句


请提供表格应用程序的示例数据。测试表格发布
显示错误时,您会看到什么?顺便说一句,从Update语句中删除batch\u id=b.batch\u id的
部分。您的merge语句是:“在apps.test\u表中找到这些特定行,然后如果它们与apps.test\u表中的行匹配,则更新它们,否则插入它们。”您看到问题了吗?您正在查找表中存在的行的子集。。。当然,您的源子查询不会找到apps.test_表中没有的额外行!您的
不匹配时
合并语句的一部分是不相关的,您应该删除它。我已经删除了该条件,但发出了persistHi!我已经解除了这个条件。谢谢你的提示。但是Merge语句仍然没有到达不匹配的部分。请记住,条件中使用的查询不会返回任何行you're welcome@GautamHans,当命令行上发出
show errors
时,您会看到什么?