Pergunta

Eu só recentemente se mudou um SQL DB a partir SQL2005 de 32 bits -> 64 bit. Estou tendo um problema de conexão à Oracle usando o provedor OraOLEDB.Oracle.

Eu era capaz de instalar o Oracle 10G cliente, ODAC 64 bit. Eu também era capaz de adicionar um servidor ligado à instância Oracle. Eu sou capaz de executar uma consulta usando o nome do servidor vinculado diretamente:

SELECT top 10 *
  FROM [DB0PBB0]..[DB0PBB0].[DM_CLICK] 

Até agora é bom, no entanto, o problema ocorre quando tento usar OPENQUERY. Eu tentei o seguinte:

select * from 
OPENQUERY(DB0PBB0,'select *  from DB0PBB0.DM_CLICK where Date_stamp <''24-Jul-09'' and Date_stamp >= ''23-Jul-09'' ')

SET FMTONLY OFF
select * from 
OPENQUERY(DB0PBB0,'select * from DB0PBB0.DM_CLICK where Date_stamp <''24-Jul-09'' and Date_stamp >= ''23-Jul-09'' ')

e eu obter apenas os nomes das colunas, nenhuma linha :(

Se eu executar este script:

SET FMTONLY OFF
select * from 
OPENQUERY(DB0PBB0,'select ''hello'' from dual ')

I get

Olá

A minha pergunta é, alguém tentou correr OPENQUERY contra a Oracle a partir de um 64bit SQL05? Qualquer? Idea por que eu iria obter apenas as colunas de volta em vez de dados? Eu tentei a mesma consulta em outro servidor com o mesmo link e ele trabalhou, ele retornou linhas.

Foi útil?

Solução

desde que você está recebendo linhas com as chances SELECT * FROM DUAL são de que ele é uma questão de consulta. Quanto à sua consulta uma armadilha potencial é que você está comparando o que parece ser uma coluna de data (DATE_STAMP) com um VARCHAR.

Você não deve confiar em conversões implícitas para comparar datas . Em vez disso, você deve utilizar as funções explícitas apropriadas, por exemple:

select * from 
OPENQUERY(DB0PBB0,'select *  
                     from DB0PBB0.DM_CLICK 
                    where Date_stamp < to_date(''24-Jul-09'', ''dd-mon-rr'') 
                      and Date_stamp >= to_date(''23-Jul-09'', ''dd-mon-rr'')')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top