使用合并语句更新列时出现问题

时间:2019-01-11 15:17:29

标签: sql oracle oracle11g

我需要基于oracle中两个表的内部联接更新一列。我正在使用合并,因为内部联接在Update中不支持。

查询:

MERGE INTO  FAC.CMC_PRSQ_SITE_QA PRSQ   
USING(
       SELECT PRPR_ID, ADDRESS_TYPE, PRAD_EFF_DT, PRAD_TERM_DT
       FROM FSG_WRK.FSG_PRAD_PRSQ_TEMP 
     ) TEMP
     ON (TEMP.PRPR_ID = PRSQ.PRPR_ID
     AND TEMP.ADDRESS_TYPE = PRSQ.PRAD_TYPE
     AND TEMP.PRAD_EFF_DT = PRSQ.PRAD_EFF_DT)
WHEN MATCHED THEN UPDATE 
SET PRSQ.PRSQ_NEXT_VER_DT = TEMP.PRAD_TERM_DT
WHERE TEMP.PRAD_TERM_DT > PRSQ.PRSQ_LAST_VER_DT ;

但是出现以下错误:

ORA-30926: unable to get a stable set of rows in the source tables
ORA-06512: at line 2
30926. 00000 -  "unable to get a stable set of rows in the source tables"
*Cause:    A stable set of rows could not be got because of large dml
           activity or a non-deterministic where clause.
*Action:   Remove any non-deterministic where clauses and reissue the dml.

此外,如果还有其他选择可以重写此查询,请告诉我。

1 个答案:

答案 0 :(得分:1)

您的源查询(TEMP)是否返回目标(PRSQ)中符合合并条件的一行的多个实例?当源包含多个需要在目标中更新的行实例时,通常会看到这种类型的错误。如果需要,则需要调整源查询或合并条件,以避免尝试将源中的多行合并到目标的同一行中。