GARANTIR DESCONTO

Fórum Texto no Oracle #451743

13/08/2013

0

Tenho um aplicativo Winforms com c# acessando banco de dados Firebird. Estou tentando fazer um teste para utilizar o Banco de Dados Oracles Express 10g.
Tenho uma tabela com um campo VARCHAR(15) no Firebird e estou testando com o VARCHAR2(15) no Oracle. No referido campo, tenho um registro que armazena o texto "00017/03". Ao fazer a consulta "select * from TABELA where CAMPO = '00017/03'", no Firebird retorna tranquilo, porém no Oracle ele me retorna que é uma data inválida. Tem como forçar o Oracle a tratar o campo como texto(mesmo com a barra "/") e me trazer o resultado correto?
Rogerio Martins

Rogerio Martins

Responder

Posts

14/08/2013

Jair N.

tenho um aplicativo winforms com c# acessando banco de dados firebird. estou tentando fazer um teste para utilizar o banco de dados oracles express 10g.
tenho uma tabela com um campo varchar(15) no firebird e estou testando com o varchar2(15) no oracle. no referido campo, tenho um registro que armazena o texto "00017/03". ao fazer a consulta "select * from tabela where campo = '00017/03'", no firebird retorna tranquilo, porém no oracle ele me retorna que é uma data inválida. tem como forçar o oracle a tratar o campo como texto(mesmo com a barra "/") e me trazer o resultado correto?


Boa Tarde, isso está muito estranho, o tipo VARCHAR está retornando como tipo DATE, numa consulta ou no seu aplicativo?
A conversão de um tipo VARCHAR() o oracle aceita VARCHAR2() ou texto como CLOB
Não existe a possibilidade de o banco fazer a comparação do tipo específico com outro reveja seus procedimentos.
Responder

Gostei + 0

14/08/2013

Rogerio Martins

O erro ocorre quando utilizo o critério "0017/03" em uma cláusula where. Lembrando que o campo que está gravada a informação é um VARCHAR2. Quando altero o valor do campo para por exemplo "0017-03" ou "0017|03" ele retorna normalmente sem erro. Veja bem: eu consigo gravar normalmente o valor com a barra de data no campo VARCHAR2, porém, o campo é chave primária e ao tentar consultar utilizando na cláusula where ocorre o erro que a data é inválida. Eu utilizo normalmente no Firebird, mas gostaria de migrar para o Oracle.
Responder

Gostei + 0

14/08/2013

Deivison Melo

Seria interessante postar o código da estrutura de sua tabela...

Nunca vi problemas desse tipo no oracle, a não ser que o esteja forçando uma conversão para data e aí o oracle vai apresentrar erros mesmo, mas conforme mencionado por você, está gravando varchar(15) e lendo varchar2(15) que a grosso modo os campos teriam o mesmo tipo de dados.

Posta a estrutura de sua tabela e também o select exato que está sendo utilizado para a consulta.
Responder

Gostei + 0

14/08/2013

Rogerio Martins

Copiado do Browse na Conexão http://127.0.0.1:8080/apex
CREATE TABLE "SERVI_VINCU"
( "CODIG_VINCU" VARCHAR2(15) NOT NULL ENABLE,
"SITUA_SERVI" CHAR(1),
PRIMARY KEY ("CODIG_VINCU") ENABLE)

Instrução:
assim dá o erro
select SV.* from SERVI_VINCU SV where SV.CODIG_VINCU = '0017/03'

assim dá certo(inclusive quando coloco alguma letra junto)
select SV.* from SERVI_VINCU SV where SV.CODIG_VINCU = 'ABC0017/03'
select SV.* from SERVI_VINCU SV where SV.CODIG_VINCU = '0017-03'

Segue a função que retorna a Conexão Utilizando Visual C# 2005 ExpressEdition:(Obs.: faz uns 7 anos que utilizo apenas Firebird com o mesmo código)
public IDbConnection getConexao()
{
IDbConnection conn = null;
try
{
switch (this.BancoDados)
{
case Banco.MySQL:
conn = new MySql.Data.MySqlClient.MySqlConnection(
"server=" + this.Path + ";user id=" + this.Usuario +
";password=" + this.Senha + ";database=" + this.NomeBD);
break;
case Banco.Firebird:
conn = new FirebirdSql.Data.FirebirdClient.FbConnection(
"User=" + this.Usuario + ";Password=" + this.Senha +
";Database=" + this.Path + ";DataSource=localhost;Port=3050;Dialect=3;");
break;
case Banco.Oracle:
conn = new System.Data.OracleClient.OracleConnection("Data Source=localhost;User Id=teste;Password=123;");
break;
}
}
catch (Exception e)
{
MessageBox.Show("Erro ao tentar conectar. Erro : " + e.ToString());
return null;
}
return conn;
}
Responder

Gostei + 0

15/08/2013

Rogerio Martins

Amigos encontrei o problema e era falha minha:

Tinha feito uma função para ajustar a instrução SQL para data caso fosse Oracle dentro da função que retorna meu IDataReader(genérico que retornava a do Banco conforme o Banco selecionado). Essa função aparecia em uma linha e tava passando sem eu perceber. Descobrir ao fazer uma conexão sem as funções utilizando apenas as do Oracle sem me preocupar com o MultiBanco e não retornava erro.

Agradeço a todos pelo apoio
Responder

Gostei + 0

15/08/2013

Deivison Melo

Post concluído!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar