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
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?