在oracle错误中更新选择查询

时间:2015-05-18 20:24:33

标签: oracle

我将具体。我试图用select进行更新,但是sql开发会抛出一个错误。查询是这样的:

    UPDATE(SELECT I.FECHA_EFECTIVA, I.FECHA_FIN, T.FECHA_EFECTIVA FECHA_EFEC_TEMA, T.FECHA_FIN FECHA_FIN_TEMA
FROM TA_SEFE_POND_INDCS_FINANS I
LEFT JOIN TA_SEFE_MATR_TEMAS_FINANS T
  ON I.TEMA_ID = T.TEMA_ID
LEFT JOIN TA_SEFE_MATR_FINAN M
  ON M.MATR_FINAN_ID = T.MATR_FINAN_ID)
set FECHA_EFECTIVA = FECHA_EFEC_TEMA,
    FECHA_FIN = FECHA_FIN_TEMA;

错误是“未知命令”。

奇怪的是,select语句工作正常,问题可能是最后的更新:S

抱歉我的英文不好.__。

2 个答案:

答案 0 :(得分:1)

使用此:

    MERGE INTO TA_SEFE_POND_INDCS_FINANS T1
USING
(
    SELECT
        T.TEMA_ID       TEMA
        ,T.FECHA_EFECTIVA   FECHA_EFEC_TEMA
                ,T.FECHA_FIN        FECHA_FIN_TEMA
    FROM
        TA_SEFE_MATR_TEMAS_FINANS T
    LEFT JOIN
                TA_SEFE_MATR_FINAN M
    ON
            M.MATR_FINAN_ID = T.MATR_FINAN_ID
) T2
ON
(
    T1.TEMA_ID = T2.TEMA
)
WHEN MATCHED THEN
UPDATE SET
    T1.FECHA_EFECTIVA = T2.FECHA_EFEC_TEMA
        ,T1.FECHA_FIN     = T2.FECHA_FIN_TEMA;

答案 1 :(得分:0)

您无法更新SELECT的结果。我认为这就是你所追求的:

WITH (SELECT i.fecha_efectiva, i.fecha_fin,
      t.fecha_efectiva fecha_efec_tema, t.fecha_fin fecha_fin_tema
      FROM ta_sefe_pond_indcs_finans i
      LEFT JOIN ta_sefe_matr_temas_finans t
        ON i.tema_id = t.tema_id
      LEFT join ta_sefe_matr_finan m
        ON m.matr_finan_id = t.matr_finan_id) a
UPDATE ta_sefe_pond_indcs_finans i
SET i.fecha_efectiva = a.fecha_efec_tema,
    i.fecha_fin = a.fecha_fin_tema
WHERE i.fecha_efectiva = a.fecha_efectiva AND i.fecha_fin = a.fecha_fin;

这会使用您的查询进行更新,但会将更新定位到您的表而不是查询。