Oracle通过联接更新csv的文本值

时间:2016-10-25 14:02:20

标签: sql oracle csv join

一些背景 - 我有一个导出的CSV数据集,它将被导入/迁移到新系统中。我在此数据集中没有识别ID,因为新系统中不需要它,但我现在需要在此CSV中添加一些其他数据。

我已将CSV导入Oracle表并创建了2个新列 - FieldLabelEDRN和ELEMENTID。我想用原始表中的相关数据更新这两列,所以我尝试了以下

UPDATE EDRN_NEW.DATADIC
SET FIELDLABELEDRN =
  (SELECT short_name
  FROM edrn.md$$_all_data_elements
  WHERE active_yn = 'YES'
  ORDER BY short_name
  ),
SET ELEMENTID =
  (SELECT element_id
  FROM edrn.md$$_all_data_elements
  WHERE active_yn = 'YES'
  ORDER BY short_name
  )

产生ora-00907错误,我知道它非常基本。我正在努力想办法获得我需要的价值。我还尝试在short_name = field标签上加入2个表,只需将element_id作为我真正需要的东西,但我不熟悉不能使用JOIN Oracle的更新

任何意见/建议都将不胜感激

1 个答案:

答案 0 :(得分:1)

Oracle提供了更新多列的简便方法。但是,您需要一些方法将临时表中的行与现有表进行匹配。

语法如下:

UPDATE EDRN_NEW.DATADIC dd
    SET (FIELDLABELEDRN, ELEMENTID) =
         (SELECT short_name, element_id
          FROM edrn.md$$_all_data_elements ade
          WHERE active_yn = 'YES' AND
                ade.?? = dd.??
         );

但是您需要某种方式来匹配行,因此您需要在ade.?? = dd.??中填写详细信息。

您可能会将UPDATEINSERT混淆。你想要这个吗?

INSERT INTO EDRN_NEW.DATADIC(FIELDLABELEDRN, ELEMENTID)
      SELECT short_name, element_id
      FROM edrn.md$$_all_data_elements ade
      WHERE active_yn = 'YES' ;