我安装了4个远程位置和oracle express数据库。这些位置在那里创建了一些交易,我想在一天内运行一次作业/程序,将新记录插入我们总部的中央表格。总公司和远程桌的表结构完全相同。
我正在运行以下查询但它没有插入任何记录。我不想每天使用物化视图或丢弃总公司表并重新创建它。
INSERT INTO CENTRAL_DATA
SELECT *
FROM (SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC1
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC2
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC3)
WHERE NOT EXISTS (SELECT * FROM CENTRAL_DATA)
任何帮助都将受到高度赞赏。 感谢。
答案 0 :(得分:1)
当CENTRAL_DATA表中存在记录时,您的查询不会插入任何内容。您缺少选择标准。那个标准是我不知道的。也许只有在没有特定位置的记录时才想插入?然后查询将是:
INSERT INTO CENTRAL_DATA
SELECT *
FROM (SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC1
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC2
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC3) I
WHERE NOT EXISTS (SELECT 1
FROM CENTRAL_DATA d
where d.location_id=i.location_id)
但是,请参阅评论为什么这并不总是一个好主意: Oracle: how to INSERT if a row doesn't exist