Jump to content
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?

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.