SQL: как написать несколько интерактивных скриптов в одном запросе (вставить строки) - PullRequest
2 голосов
/ 07 ноября 2019

Простой вопрос. Я просто хочу узнать, как написать запрос, который вставит в мою таблицу 2 строки, написав один запрос вместо двух отдельных. Мои запросы работают отлично, я просто хочу узнать более простой способ, если это возможно. Ниже приведены мои 2 запроса, которые я хотел бы объединить в 1.

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 ]

2 голосов
/ 07 ноября 2019

Не уверен, что это то, что вы считаете, но вы можете сделать это так:

INSERT INTO dept

SELECT dept_id_seq.NEXTVAL, 'EDUCATION' UNION ALL

SELECT dept_id_seq.NEXTVAL, 'ADMINISTRATION'

2 голосов
/ 07 ноября 2019

Вы можете использовать следующий синтаксис:

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;
2 голосов
/ 07 ноября 2019

Не совсем понятно, о чем вы просите, но вы можете выполнить вставку 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;

Однако, похоже, вы захотите использовать курсор для циклического перемещения по списку. значений и вставьте их в другое место.

1 голос
/ 08 ноября 2019

Или вы можете использовать MERGE только с заполненной веткой NOT 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...