代码之家  ›  专栏  ›  技术社区  ›  John Wick

什么是解决此错误的好方法?ORA-30926:无法在源表中获得稳定的行集

  •  1
  • John Wick  · 技术社区  · 7 年前

    我正在尝试从本地数据库的“temp”表(交换数据)运行合并,以便通过数据库链接将数据发送到“clone”表。运行合并时,收到以下错误:

    ORA-30926:无法在源表中获得稳定的行集

    我知道这可能是因为我有重复的记录(基于我读到的内容),但我不确定如果没有一个不同的行ID,我将如何删除重复的记录。我尝试将一个不同的行放入,以查看这是否有助于无效。任何建议/一般指导都将非常感谢。以下是我的合并代码:

    MERGE INTO db1.IN_DATA@ora Y
    USING
        (SELECT DISTINCT FROM,
                TO,
              "DATE_",
              TIMESTAMP_, 
                VAL,
                LOCAL_TIMESTAMP,
                LAST_UPDATE
        FROM    IN_DATA
      ) X ON (
                Y.FROM = X.FROM
                AND Y.TO = X.TO
                AND Y.TIMESTAMP_ = X.TIMESTAMP_)
    WHEN MATCHED THEN
        UPDATE 
          SET Y.VAL                = X.VAL,
           Y.LOCAL_TIMESTAMP = X.LOCAL_TIMESTAMP
        WHEN NOT MATCHED THEN 
            INSERT 
                (
              FROM,
              TO,
              DATE_,
              TIMESTAMP_,
              VAL,
              LOCAL_TIMESTAMP,
              LAST_UPDATE)
            VALUES   
             (X.FROM,
              X.TO,
              X.DATE_,
              X.TIMESTAMP_,
              X.VAL,
              X.LOCAL_TIMESTAMP,
              X.LAST_UPDATE);
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Olivier Jacot-Descombes    7 年前

    由于选择的列多于只用于匹配的列,因此distinct子句不能保证匹配将产生唯一的匹配列。

    尝试在列上定义唯一索引或唯一约束 "FROM" , "TO" "TIMESTAMP_" 在表格中 "IN_DATA" ,如果还没有这样的索引、约束或主键。