Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
14
respostas

Dúvida no Ex. 6 da Aula 1 - Consultando os dados

Olá amigos!

No meu INSERT sempre dá o seguinte erro:

ORA-01858: foi localizado um caractere não numérico onde se esperava um
numérico

Já identifiquei que o problema está no formato da data que estou utilizando.

Estou em ambiente Windows (10) e utilizando o SQLPlus 11g.

Realizei o teste com a da da no formato 'DDMMAA' e funciona normalmente. Já no formato 'DD-MMM-AAAA' não funciona, apresentando o erro especificado acima.

Por que?

14 respostas

'DD-MON-YYYY'

Oi Samuel, é isso mesmo que o Ênio disse, o formato do mês são as 3 primeiras letras do mesmo, em inglês. Exemplo: 3 de agosto de 2015 é '03-AUG-2015'

É exatamente nesse formato 00-MON-0000 que o erro é gerado. Mas no outro formato que indiquei DDMMAA, funciona.

Boa tarde Samuel, você está utilizando o sqlplus no terminal ou prompt? Ou está utilizando alguma IDE, como o SQL Developer?

Segue um exemplo: INSERT INTO TABELA VALUES (TO_DATE('10-FEV-2012','DD-MON-YYYY'), TO_DATE('FEV-10-2012','MON-dd-YYYY'));

Manda o insert que você está fazendo.

Pelo sqlplus, através do terminal, eu faço:

INSERT INTO TABELA VALUES ('10-FEB-2012');

Primeiramente, obrigado pela atenção de vocês.

@Rômulo, estou utilizando o sqlplus no prompt.

@Ênio, estou seguindo exatamente como na aula. Irei tentar sua sugestão...

Oi Samuel, você pode colocar o comando INSERT inteiro aqui, para eu dar uma olhada?

INSERT INTO COMPRAS (ID, VALOR, DATA, OBSERVACOES, RECEBIDO) VALUES (ID_SEQ.NEXTVAL, 100.0, '12-MAY-2007', 'COMPRAS DE MAIO', '1');

SQL> create table compras (
  2      id number primary key,
  3      valor number,
  4      data date,
  5      observacoes varchar2(30),
  6      recebido char check (recebido in (0,1))
  7  );

Tabela criada.

SQL> create sequence id_seq;

Sequência criada.

SQL> INSERT INTO COMPRAS (ID, VALOR, DATA, OBSERVACOES, RECEBIDO) VALUES (ID_SEQ
.NEXTVAL, 100.0, '12-MAY-2007', 'COMPRAS DE MAIO', '1');
INSERT INTO COMPRAS (ID, VALOR, DATA, OBSERVACOES, RECEBIDO) VALUES (ID_SEQ.NEXT
VAL, 100.0, '12-MAY-2007', 'COMPRAS DE MAIO', '1')

            *
ERRO na linha 1:
ORA-01858: foi localizado um caractere não numérico onde se esperava um
numérico

Então, corrijo para o formato 'DDMMAAA', númérico. E dá certo!

SQL> INSERT INTO COMPRAS (ID, VALOR, DATA, OBSERVACOES, RECEBIDO) VALUES (ID_SEQ
.NEXTVAL, 100.0, '12052007', 'COMPRAS DE MAIO', '1');

1 linha criada.

SQL>

Estou com esse mesmo problema. A data não é inserida conforme o vídeo. Com isso fica impossível modelar a tabela.

Boa noite Samuel, peço que você vá utilizando esse formato de data, estou verificando o motivo desse erro estar acontecendo. Assim como o Welber, eu respondi à sua dúvida no seu tópico.

solução!

Boa tarde Samuel, verifiquei aqui e você e o Welber devem estar com esse erro por causa do padrão da data. No Linux, o Oracle é instalado no padrão americano, mas no Windows ele é instalado no padrão brasileiro, você pode conferir isso rodando o seguinte comando:

show parameter nls_lang;

O erro ocorre pois na data são passadas as 3 primeiras letras do mês em inglês, considerando o padrão americano. No brasileiro devem ser passada as letras em português, ao invés da data ser '10-MAY-2011', será '10-MAI-2011'. Eu disponibilizei no exercício um novo arquivo .sql para o padrão brasileiro, peço que você o baixe e tente importá-lo. Qualquer dúvida é só comentar aqui.

Olá Rômulo!

Testado! Está funcionando legalzinho!

Que bacana que a partir dessa dúvida pudemos contribuir.

Sucesso. E muito obrigado pela atenção.

Abraço ;-)