2

简单的问题 - 我只想学习如何编写一个查询,通过编写一个查询而不是 2 个单独的查询,将 2 行插入我的表中。我的查询完全正常,我只想知道一种更简单的方法,如果可能的话。以下是我想合并为 1 的 2 个查询。

INSERT INTO dept (deptno, dname)
VALUES (dept_id_seq.NEXTVAL, 'EDUCATION');

INSERT INTO dept (deptno, dname)
VALUES (dept_id_seq.NEXTVAL, 'ADMINISTRATION');

如上所述,我的代码按预期工作。这是我的输出,没有错误-

DE DNAME                          LOC
-- ------------------------------ ------------------------------
10 ACCOUNTING                     NEW YORK
20 RESEARCH                       DALLAS
30 SALES                          CHICAGO
40 OPERATIONS                     BOSTON
60 EDUCATION
70 ADMINISTRATION

感谢任何人的帮助!

4

4 回答 4

2

它并不完全清楚您的要求,但您可以使用以下命令执行插入 1 个脚本:

BEGIN
INSERT INTO dept (deptno, dname) VALUES (dept_id_seq.NEXTVAL, 'EDUCATION');
INSERT INTO dept (deptno, dname) VALUES (dept_id_seq.NEXTVAL, 'ADMINISTRATION');
END;

但是,您可能希望使用游标循环遍历值列表并将它们插入到其他位置。

于 2019-11-07T17:19:58.537 回答
2

不确定这是否是您会考虑的,但您可以这样做:

INSERT INTO dept

SELECT dept_id_seq.NEXTVAL, 'EDUCATION' UNION ALL

SELECT dept_id_seq.NEXTVAL, 'ADMINISTRATION'

于 2019-11-07T17:21:00.477 回答
2

您可以使用以下语法:

INSERT ALL
  INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
  INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
  INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
SELECT * FROM dual;
于 2019-11-07T17:22:40.163 回答
1

或者您可以使用 aMERGENOT MATCHED填写分支:

MERGE INTO DEPT d
  USING (SELECT 'EDUCATION' AS DNAME FROM DUAL UNION ALL
         SELECT 'ADMINISTRATION' AS DNAME FROM DUAL) s
    ON (d.DNAME = s.DNAME)
  WHEN NOT MATCHED THEN
    INSERT (DEPTNO, DNAME)
    VALUES (DEPT_ID_SEQ.NEXTVAL, s.DNAME)
于 2019-11-07T21:29:43.280 回答