Erro To_Char

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

Boa tarde, alguém sabe por que o código abaixo está errado ?

Selecionar tudo

declare

dPag date;
dVenc date;
d number;

begin

dPag := to_char('02/03/2009','mm');

end;
Erro:

Selecionar tudo

[1]: (Error): ORA-06550: line 9, column 9: PLS-00307: too many declarations of 'TO_CHAR' match this call ORA-06550: line 9, column 1: PL/SQL: Statement ignored
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você está querendo transformar caracter p/ caracter.
Veja, o TO_CHAR transforma números e datas p/ caractere.

Antes de usar o TO_CHAR pra pegar o mês, você tem que transformar essa string em DATA. Algo assim:

Selecionar tudo

dPag := to_char(  TO_DATE('02/03/2009','DD/MM/YYYY')  ,'mm');
Se você testar direto com um campo data, daí vai funcionar do seu jeito:

Selecionar tudo

dPag := to_char(  SYSDATE  ,'mm'); 
Também pode usar EXTRACT pra pegar o mês:
http://glufke.net/oracle/viewtopic.php?t=2344
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

está dando esse erro agora:

Selecionar tudo

 
declare 

dPag date; 
dVenc date; 
d number; 

begin 

dPag := to_char(to_date('02/03/2009','dd/mm/yyyy'),'mm'); 

end; 

[1]: (Error): ORA-01840: input value not long enough for date format ORA-06512: at line 9

Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Isso porque sua variável é DATA e você está tentando colocar numero dentro de data.

Selecionar tudo

dPag date;
O mês 03 não é uma data. '03' é um NÚMERO, não uma data.

Você está colocando um número numa variável de data... Sugiro você fazer alguns testes e realizar uma leitura sobre os tipos de variáveis do PL/SQL. :shock:
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Mude a declaração da variável:

Selecionar tudo

dPag varchar2(3); 
E agora refaça o teste:

Selecionar tudo

dPag := to_char(to_date('02/03/2009','dd/mm/yyyy'),'mm'); 
Funciona?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes