Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何用另一个表(目标)更新一个表(源)中的2列_Sql_Oracle_Oracle11g_Oracle10g - Fatal编程技术网

Sql 如何用另一个表(目标)更新一个表(源)中的2列

Sql 如何用另一个表(目标)更新一个表(源)中的2列,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,我有一个名为Edwin.psp_labour_schd_day_f_rollup_frs_356的源表和一个名为Edwin.psp_labour_schd_day_f_rollup的目标表,我需要更新源到目标的日期值。这两个日期列是SRC_CREATED_date和SRC_LAST_UPDATE_date。基于以下on条款 A.PAY_RANGE_START_DATE_KEY = B.PAY_RANGE_START_DATE_KEY AND A.AA_PERSON_NATURAL_KEY

我有一个名为Edwin.psp_labour_schd_day_f_rollup_frs_356的源表和一个名为Edwin.psp_labour_schd_day_f_rollup的目标表,我需要更新源到目标的日期值。这两个日期列是SRC_CREATED_date和SRC_LAST_UPDATE_date。基于以下on条款

  A.PAY_RANGE_START_DATE_KEY = B.PAY_RANGE_START_DATE_KEY AND
  A.AA_PERSON_NATURAL_KEY    = B.AA_PERSON_NATURAL_KEY AND
  A.AA_PERSON_ASSIGNMENT_KEY = B.AA_PERSON_ASSIGNMENT_KEY AND
  A.SCHEDULE_LINE_ID         = B.SCHEDULE_LINE_ID
如何做到这一点

我们正在使用的合并代码

MERGE
/*+ parallel(A) enable_parallel_dml*/
INTO
(
  SELECT
    PAY_RANGE_START_DATE_KEY,
    AA_PERSON_NATURAL_KEY,
    AA_PERSON_ASSIGNMENT_KEY,
    SCHEDULE_LINE_ID,
    SRC_CREATED_DATE,
    SRC_LAST_UPDATE_DATE
  FROM
    EDWFIN.PSP_LABOR_SCHD_DAY_F_ROLLUP
)
A USING
(
  SELECT
    pay_range_start_date_key,
    aa_person_natural_key,
    aa_person_assignment_key,
    schedule_line_id,
    MAX(src_created_date) src_created_date,
    MAX(src_last_update_date) src_last_update_date
  FROM
    edwfin.psp_labor_schd_day_f_rollup_frs_356
  GROUP BY
    pay_range_start_date_key,
    aa_person_natural_key,
    aa_person_assignment_key,
    schedule_line_id
)
B ON
(
  A.PAY_RANGE_START_DATE_KEY = B.PAY_RANGE_START_DATE_KEY AND
  A.AA_PERSON_NATURAL_KEY    = B.AA_PERSON_NATURAL_KEY AND
  A.AA_PERSON_ASSIGNMENT_KEY = B.AA_PERSON_ASSIGNMENT_KEY AND
  A.SCHEDULE_LINE_ID         = B.SCHEDULE_LINE_ID
)
WHEN MATCHED THEN
  UPDATE
  SET
    A.SRC_CREATED_DATE     = B.SRC_CREATED_DATE,
    A.SRC_LAST_UPDATE_DATE = B.SRC_LAST_UPDATE_DATE
  WHERE
    A.SRC_CREATED_DATE      <> B.SRC_CREATED_DATE
  OR A.SRC_LAST_UPDATE_DATE <> B.SRC_LAST_UPDATE_DATE;

你试过什么?你研究过连接吗?我之前使用过merge,但主要问题是merging抛出我得到了相同的ORA-30926错误,但业务部门希望即使是重复的数据也要更新,因此,Think update不像merge那样逐行进行处理,并且可以再次更新同一组行两次,因此希望使用update语句进行测试。请提供示例数据和所需结果。如果您有现有代码,您应该显示它。如果您遇到ORA-30926:无法在源表中获得一组稳定的行错误,因为源表中有多行,而目标表中只有一行,您如何知道这两个值中的哪一个用于更新?如果您解决了这个问题,就可以解决合并问题。如果不解决此问题,您的更新可能会遇到一个问题,即单行子查询返回多行。请阅读并注意