Insert em múltiplas tabelas no Oracle

Categoria: Oracle
Publicado em 19 de Junho de 2013

A sintaxe de insert do Oracle possui a característica de aceitar inserção em múltiplas tabelas em um único comando insert.

Segue abaixo sintaxe de inserção incondicional:

1
2
3
4
5
6
7
8
9
10
INSERT ALL
   INTO TABELA_A(CAMPO1, CAMPO2)
   INTO TABELA_B(CAMPO1, CAMPO2)
   INTO TABELA_C(CAMPO1, CAMPO2)
SELECT
   CAMPO1,
   CAMPO2
FROM
   TABELA_X
;

Na inserção incondicional, é obrigatório o uso do operador ALL (linha 1), e todas as tabelas envolvidas na operação são afetadas (linhas 2 a 4).

Segue abaixo sintaxe de inserção condicional:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
INSERT ALL
   WHEN ANO = 2011 THEN 
      INTO TABELA_2011(CAMPO1, CAMPO2) VALUES(CAMPO1, CAMPO2)
   WHEN ANO = 2012 THEN
      INTO TABELA_2012(CAMPO1, CAMPO2) VALUES(CAMPO1, CAMPO2)
   WHEN ANO = 2013 THEN
      INTO TABELA_2013(CAMPO1, CAMPO2) VALUES(CAMPO1, CAMPO2)
   ELSE
      INTO TABELA_HIST(CAMPO1, CAMPO2) VALUES(CAMPO1, CAMPO2)
SELECT
   ANO,
   CAMPO1,
   CAMPO2
FROM
   TABELA_X
;

Na inserção condicional o operador ALL na linha 1 pode ser trocado para FIRST (ou omitido). Se o first for utilizado, somente uma condição WHEN da lista de condições será afetada para cada registro encontrado na subquery. No caso do operador ALL, todas os WHENs que satisfazerem a condição serão afetados. Se este operador for omitido, o Oracle assumirá o valor padrão ALL durante a inserção.





 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados