如何使用 NOT EXISTS 从数据 Link 表中插入记录

How to INSERT records from Data Link Tables using NOT EXISTS

我安装了 4 个远程位置和 oracle express 数据库。这些位置在那里创建了一些交易,我想每天 运行 一次 job/procedure 将新记录插入我们总部的中央 table。总公司table结构和远程table完全一样

我运行正在执行以下查询,但它没有插入任何记录。不想用物化视图,也不想天天把总公司table丢了再建

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)

我们将不胜感激任何帮助。 谢谢

当 CENTRAL_DATA table 中存在记录时,您的查询不会插入任何内容。您缺少选择标准。我不知道那个标准是什么。也许您想仅在特定位置没有记录时才插入?那么查询将是:

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