SQL:如何在一个查询中编写多个交互式脚本(插入行)

SQL: How to write multiple interactive scripts in one query (insert rows)

简单的问题 - 我只想学习如何编写一个查询,通过编写一个查询而不是 2 个单独的查询来将 2 行插入我的 table。我的查询工作完全正常,我只想知道一种更简单的方法,如果可能的话。以下是我想合并为 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

感谢大家的帮助!

它不完全清楚你的要求,但你可以让你的插入 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;

不过,您可能希望使用游标遍历值列表并将它们插入其他位置。

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

INSERT INTO dept

SELECT dept_id_seq.NEXTVAL, 'EDUCATION' UNION ALL

SELECT dept_id_seq.NEXTVAL, 'ADMINISTRATION'

您可以使用以下语法:

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;

或者您可以使用仅填充 NOT MATCHED 分支的 MERGE

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)