如何轻松合并到sql语句中

时间:2011-08-18 06:34:02

标签: sql oracle merge oracle10g

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);

在上面给出的信息中看到,在插入之后我不得不提及每一列,而不是键入每一列,我可以将其替换为其他内容。

1 个答案:

答案 0 :(得分:0)

您可以省略列列表 INSERT ,但不能在 VALUES 之后。 manual说:

  

如果省略INSERT关键字后的列列表,则编号   目标表中的列必须与中的值的数量匹配   VALUES条款。

手册忘记提及 - 以及为什么我建议不要忽略列名称 - 是 VALUES 之后的表达式的顺序必须与表的DDL中的列顺序匹配。