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)
简单的问题 - 我只想学习如何编写一个查询,通过编写一个查询而不是 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)