Hoje um cliente solicitou apoio para identificar o que estava gerando erro na criação de sua procedure e a deixando inválida na base de dados, pois bem, para identificarmos o que estava acontecendo bastou uma simples verificação:
SQL> show error procedure teste Errors for PROCEDURE TESTE: LINE/COL ERROR -------- ----------------------------------------------------------------- 60/12 PL/SQL: SQL Statement ignored 60/24 PL/SQL: ORA-00947: not enough values 97/12 PL/SQL: SQL Statement ignored 97/24 PL/SQL: ORA-00947: not enough values
Maravilha, identificamos que o erro é “PL/SQL: ORA-00947: not enough values” mas o que isto quer dizer? Significa que “Não há valores suficientes”, ou seja, no INSERT está sendo passado uma quantidade inferior de valores do que é necessário ou foi especificado na instrução DML. Vejamos:
SQL> insert into academico (codigo, nome, telefone) values (1,'ANDERSON'); insert into academico (codigo, nome, telefone) values (1,'ANDERSON') * ERROR at line 1: ORA-00947: not enough values
Neste exemplo podemos verificar que foi especificado 3 colunas porém apenas 2 valores foram passados no values, o mesmo erro também ocorre com instruções INSERT SELECT conforme abaixo:
SQL> insert into academico (codigo, nome, telefone) select codigo, nome from academico_tmp; insert into academico (codigo, nome, telefone) select codigo, nome from academico_tmp * ERROR at line 1: ORA-00947: not enough values
Para resolvermos este ERRO basta especificarmos a quantidade correta de valores ou eliminar a coluna desnecessária.
SQL> insert into academico (codigo, nome, telefone) values (1,'ANDERSON',99811456); 1 row created.
Ou
SQL> insert into academico (codigo, nome) select codigo, nome from academico_tmp; 1 row created.
Autor: Anderson Graf
Bacharel em Sistemas de Informação e MBA em Gestão de Banco de Dados Oracle. Entusiasta da tecnologia Oracle, ACE Associate ♠, autor em vários blogs e OTN. Consultor Oracle Senior na Exímio Soluções em TI
Envolvido em soluções de:
– Implementação, migração, gerenciamento e suporte a produtos Oracle, multiplataforma
– Monitoramento de ambientes 24×7
– Backup e Recovery
– Performance e Tuning
– Alta disponibilidade (HA) – RAC, Data Guard
– EM database/grid/cloud control
– Particionamento & Advanced Compression
– Oracle Engineered Systems – ODA, Exadata
Blog pessoal: http://www.andersondba.com.br
Articulista na Oracle Technology Network (OTN) – https://goo.gl/99R6yW
ACE Associate – https://goo.gl/MBB51b
Articulista GPO – http://profissionaloracle.com.br
Obrigado cara… um insert com mais de 50 campos. Fui conferir um por um e havia um campo sem receber valor. Apanhando do Oracle. Vindo do SQL Server