Usuário com melhor resposta
Ajuda Openquery

Pergunta
-
Amigos.
estou executando o mesmo openquery no Toad e funciona, porém quando o executo no Sqlserver não retorna valor algum.
Code SnippetSELECT
*FROM
OPENQUERY(COBPRD01,'Select Account_ID
From ICS_E_ACTION_LAUNCHER
WHERE EXECUTION_DATE <= ''01-08-2008'' AND EXECUTION_DATE >= ''31-08-2008''
Group By Account_ID'
)
Respostas
-
Olá Daniel,
Como está exatamente a sua query no SQL Server?
No post anterior eu estava preocupado em te mostrar o erro de lógica, e deixei o formato da data antigo (dd/mm/yyyy). Que formato você está utilizando?
Se utilizar yyyy-mm-dd, não resolve?
Code SnippetWHERE EXECUTION_DATE >= '2008-08-01' AND EXECUTION_DATE <= '2008-08-31'
Abraços,
Caio Proiete
Caio Proiete
http://www.caioproiete.com
Todas as Respostas
-
-
-
-
Gustavo,
desculpe não vi a sua resposta. Mas foi exatamente que eu fiz eu refiz a consulta. Porém agora estou com um problema quando executo no client do Oracle retorna o resultado, mas quando executo no Client do SqlServer não retorna valor algum.
Saberia dizer o que pode está influênciando?
-
Olá Daniel,
Além do formato da data que o Gustavo mencionou e que pode, com certeza, estar afetando os resultados, será que não existe um errinho de lógica na query?
Code SnippetWHERE
EXECUTION_DATE <= '01-08-2008' AND EXECUTION_DATE >= '31-08-2008'Como que a data pode ser menor que 01 de Agosto e, ao mesmo tempo, ser maior que 31 de Agosto?
Abraços,
Caio Proiete
Caio Proiete
http://www.caioproiete.com -
-
Olá Daniel,
Estou sem SQL Server e Oracle neste momento, e não posso testar, mas logicamente, a condição está invertida:
Code SnippetWHERE EXECUTION_DATE <= '01-08-2008' AND EXECUTION_DATE >= '31-08-2008'
Deveria ser:
Code SnippetWHERE EXECUTION_DATE >= '01-08-2008' AND EXECUTION_DATE <= '31-08-2008'
Se você estivesse utilizando o operator BETWEEN, seria diferente... Mas na lógica, não faz sentido o primeiro.
Abraços,
Caio Proiete
Caio Proiete
http://www.caioproiete.com -
-
Olá Daniel,
Como está exatamente a sua query no SQL Server?
No post anterior eu estava preocupado em te mostrar o erro de lógica, e deixei o formato da data antigo (dd/mm/yyyy). Que formato você está utilizando?
Se utilizar yyyy-mm-dd, não resolve?
Code SnippetWHERE EXECUTION_DATE >= '2008-08-01' AND EXECUTION_DATE <= '2008-08-31'
Abraços,
Caio Proiete
Caio Proiete
http://www.caioproiete.com -
Olá Daniel,
Acho que a linha de ação do Caio é a mais correta (ele viu um erro de lógica que eu sequer havia percebido). Só que ainda não sabemos se há um erro na consulta, ou um erro no OPENQUERY, um erro de permissão e por aí vai...
A grande (e possível) desconfiança é em torno do formato da data, mas acho que para termos certeza deveríamos testar uma consulta que não envolvesse esse formato. Se houver retorno, então o formato é o culpado. Tente fazer o seguinte:
Coloque uma consulta genérica. Ex: SELECT SYSDATE FROM DUAL
Coloque uma consulta sem filtros de data. Ex: WHERE ROWNUM = 1
Se essas consultas retornarem poderemos avaliar outras possibilidades. Talvez o usuário do SQL Server esteja caindo em um outro banco, em outro esquema, etc.
[ ]s,
Gustavo
-
-
Olá Daniel,
Se você teve retorno então de fato as permissões estão Ok, as tabelas são as corretas, os esquemas estão certos... Enfim, me parece que quando você conecta via Toad e via SQL Server há uma diferença em como as datas são comparadas. Agora para mapear essas diferenças...
Em todo caso, está definitivamente mapeado que o problema não é com o SQL Server. Acho que agora é partir para o Oracle e ver que configurações devem ser feitas para que as comparações de data sejam feitas da forma que você deseja.
[ ]s,
Gustavo
-
-
Gustavo/Caio,
Quando realizo o select no Openquery funciona normalmente, porém quando utilizo o 'With' para armazenar o Openquery, desta maneira abaixo e tendo executar um insert em uma tabela exibe o seguinte erro:
Poderiam ajudar?
Code SnippetWith
Daniel As (SELECT
*FROM
OPENQUERY
(COBPRD01,'Select Acoes.Account_ID,
to_date(to_char(Acoes.EXECUTION_date, ''DD/MM/YYYY''), ''DD/MM/YYYY'') "Dt_Exec",
DescAcoes.Family_Id,
DescAcoes.SHDESC,
Acoes.Status
From ICS_E_ACTION_LAUNCHER Acoes,
ICS_R_ACTION DescAcoes
WHERE Acoes.Action_Id = DescAcoes.Action_Id
And Trunc(Acoes.EXECUTION_DATE) >= ''2008-08-01'' AND Trunc(Acoes.EXECUTION_DATE) <= ''2008-08-31''
Group By Acoes.Account_ID, to_date(to_char(Acoes.EXECUTION_date, ''DD/MM/YYYY''), ''DD/MM/YYYY''),
DescAcoes.Family_Id, DescAcoes.SHDESC, Acoes.Status'
))
Code SnippetOLE DB provider "OraOLEDB.Oracle" for linked server "COBPRD01" returned message "".
Msg 7346, Level 16, State 2, Line 1
Cannot get the data of the row from the OLE DB provider "OraOLEDB.Oracle" for linked server "COBPRD01".
-
Olá Daniel,
Acredito que você devesse separar as Threads. O primeiro era um problema de como fazer a consulta e o segundo já é um outro problema associado a uma limitação de Linked Server. É que se mantermos muitos assuntos na mesma Thread o índice de respostas na Thread cai (ninguém gosta de ver aquela Thread como um monte de posts e não resolvida) além de prejudicar o sistema de classificação. Acredito também que o Caio mereça a pontuação, pois, resolveu a dúvida.
Em todo caso, normalmente esse tipo de limitação ocorre porque sua pesquisa não possui algum campo que seja chave primária e atualizações via Linked Server precisam referenciar tabelas ou pesquisas que tenha chave primária contemplada.
[ ]s,
Gustavo
-