我正在尝试使用merge语句添加到manager_copy_d_cds表中,来自的CD 原始表。如果匹配,我将更新标题和年份。如果没有,我想插入原始表中的数据
我收到的错误是这样的: ORA-01747:user.table.column,table.column或列规范无效
merge into manager_copy_d_cds m using d_cds c
on (m.cd_number = c.cd_number)
when matched then update
set (m.title = c.title, m.year = c.year)
when not matched then insert
values (c.cd_number, c.title, c.producer, c.year);
表格结构:
CD_NUMBER - NUMBER(5,0) - Not nullable - primary key(1) TITLE - VARCHAR2(50) - Not nullable - - PRODUCER - VARCHAR2(50) - Not nullable - - YEAR - VARCHAR2(4) - Not nullable - -
我错过了什么?
答案 0 :(得分:0)
逻辑上,您不需要在VALUES()子句中使用表别名或UPDATE子句中的目标列名称作为前缀,因此我怀疑您可以删除一个或另一个或两者。
尝试:
merge into manager_copy_d_cds m using d_cds c
on (m.cd_number = c.cd_number)
when matched then update
set (title = c.title, year = c.year)
when not matched then insert
values (cd_number, title, producer, year);
答案 1 :(得分:0)
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*.01)
WHERE (S.salary <= 8000);
注意这是在insert语句附近:(指定了列名) INSERT(D.employee_id,D.bonus)