Ir para conteúdo
mtemporim

Como são as regras para projetar dados no INSERT ALL no Oracle 12c?

Recommended Posts

Eu tenho duas tabelas e tentando inserir dados de outra tabela usando o comando insert all, mas quando eu executo mostra a seguinte mensagem ORA-00913 too many values.

Eu verifiquei a projeção com a seleção e só funciona quando tenho a mesma quantidade de campos nas cláusulas com a projeção na seleção final, quando coloco "*" mostra o erro ORA-00913. Eu tenho outras partes no meu código muito parecidos, mas isso não acontece.

As tabelas são empl_2a5, empl_5a10, empl_10a15 e empl_15a20, todas com a mesma estrutura

CREATE TABLE empl_15a20 --empl_2a5, empl_5a10, empl_10a15
AS 
SELECT 
  employee_id
 ,first_name
 ,last_name
 ,salary
FROM employees WHERE 1 = 2 ;

A inserção abaixo funciona bem

INSERT ALL 
  WHEN salary > 2000 AND salary < 5000 THEN 
    INTO empl_2a5 VALUES (employee_id, first_name, last_name, salary)
  WHEN salary >= 5000 AND salary < 10000 THEN
    INTO empl_5a10 VALUES (employee_id, first_name, last_name, salary)
  WHEN salary >= 10000 AND salary < 15000 THEN
    INTO empl_10a15 VALUES (employee_id, first_name, last_name, salary)
  ELSE
    INTO empl_15a20 VALUES (employee_id, first_name, last_name, salary)
SELECT * FROM employees;

Abaixo esta o caso dos erros, eu tenho duas tabelas com a mesma estrutura emplcomm e noemplcomm

CREATE TABLE noemplcomm --emplcomm
AS
SELECT 
  employee_id
 ,department_id
 ,job_id
 ,salary
 ,commission_pct
FROM employees WHERE 1 = 2 ;

Quando executo esta inserção com "*" mostra o erro ORA-00913, só funciona quando deixo a parte abaixo sem os  comentários

Citar

/* employee_id, department_id, job_id, salary, commission_pct */

 
INSERT ALL
  WHEN NVL(commission_pct,0) = 0 THEN 
    INTO empl_1 (employee_id, department_id, job_id, salary, commission_pct)
  ELSE
    INTO empl_1 (employee_id, department_id, job_id, salary, commission_pct)
SELECT /*employee_id, department_id, job_id, salary, commission_pct*/ * FROM employees;

Por que no primeiro exemplo eu posso executar o comando com * mesmo tendo apenas alguns campos no comando INSERT ALL e o segundo exemplo isso não acontece?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.