Sql Oracle合并语句未到达不匹配的部分
下面的Merge语句没有插入(将不匹配)记录 Merge子句的条件部分中使用的查询有时不会返回任何行 这是否导致插入不发生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 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
时,您会看到什么?