SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
60 HELP DESK PITTSBURGH
40 OPERATIONS BOSTON
SQL> SELECT * FROM dept_online;
DEPTNO DNAME LOC
40 OPERATIONS BOSTON
20 RESEARCH DEV DALLAS
50 ENGINEERING WEXFORD
SQL> MERGE INTO dept d
USING (SELECT deptno, dname, loc
FROM dept_online) o
ON (d.deptno = o.deptno)
WHEN MATCHED THEN
UPDATE SET d.dname = o.dname, d.loc = o.loc
WHEN NOT MATCHED THEN
INSERT (d.deptno, d.dname, d.loc)
VALUES (o.deptno, o.dname, o.loc);
在上面给出的信息中看到,在插入之后我不得不提及每一列,而不是键入每一列,我可以将其替换为其他内容。
答案 0 :(得分:0)
您可以省略列列表 INSERT ,但不能在 VALUES 之后。 manual说:
如果省略INSERT关键字后的列列表,则编号 目标表中的列必须与中的值的数量匹配 VALUES条款。
手册忘记提及 - 以及为什么我建议不要忽略列名称 - 是 VALUES 之后的表达式的顺序必须与表的DDL中的列顺序匹配。