【发布时间】:2013-04-19 13:34:25
【问题描述】:
你能建议一下,这个查询有什么问题吗?它总是提取 0 条记录而不是插入数据。 我检查了选择查询,它正在返回行。但我不确定合并部分发生了什么错误,它没有插入/更新表。
ExtractType NUMBER(9);
RecordsExtracted NUMBER(9);
CurStatus NUMBER(9);
StartDate date;
ErrorMessage NVARCHAR2(1000);
LastExtrctTimestamp DATE;
BEGIN
StartDate := sysdate;
ExtractType := 79;
-- Fetching the Last Extract Time Stamp
Select max(ExtractTimestamp) INTO LastExtrctTimestamp from ExtractRecords where Status = 2 and ExtractRecords.ExtractType= ExtractType;
IF LastExtrctTimestamp IS NULL
THEN LastExtrctTimestamp := To_Date('01/01/1901', 'MM/dd/yyyy');
END IF;
MERGE INTO Table MCTH
USING (
SELECT
val1, val2, val3, .... val1
FROM
View_RPT
WHERE TransitionDate >= LastExtrctTimestamp
) Core
ON(MCTH.valId= Core.ValId)
WHEN MATCHED THEN
UPDATE SET
MCTH.val1= Core.val1,
MCTH.val2= Core.val2,
MCTH.val3= Core.val3,
.
.
MCTH.val4= Core.val4
WHEN NOT MATCHED THEN
INSERT (MCTH.val1,MCTH.val2,MCTH.val3,MCTH.val4,
...,MCTH.val5)
VALUES (Core.val1,Core.val2,Core.val3,Core.val4,
...,Core.val5);
RecordsExtracted := SQL%RowCount;
DBMS_OUTPUT.put_line('MCTH Records Merged:' || RecordsExtracted);
COMMIT;
END;
【问题讨论】:
-
查询返回的是
01/01/1901,还是max(ExtractTimestamp)的实际值?您可以在块内运行查询并输出行以确认它应该对合并可见吗?看起来可能不是这里的问题,但总是值得检查...是否在所有会话中都提交了所有数据? -
嗨@AlexPoole .. 数据已经过检查,一切正常。我今天发现的有趣部分是,上面的代码在开发数据库中返回带有值的“RecordsExtracte”。但在 UAT/PRD 环境中的记录为零。我尝试了 GRANT MERGE 权限,但这似乎不起作用。有什么想法吗?