Pergunta

Temos recentemente teve que fazer algum trabalho com um banco de dados OpenEdge que um terço usos produtos partido, e hoje (depois de muito cabelo-puxando), nós finalmente identificado por uma visão estava retornando nenhum resultado. Este ponto de vista em questão combina cerca de 100 mesas separadas, e é então consultado contra (temos direitos limitados a esse banco de dados). Um dos campos retornados por este ponto de vista é um literal cadeia de hard-coded, ao longo das linhas

'John Smith' AS TheName

Estávamos tendo dificuldade para executar consultas que incluíram esta cadeia, o que nós estávamos tentando RTrim (a visão retornou um monte de espaços à direita) e, em seguida, concatenar com outro campo. No entanto, se usássemos RTrim neste campo, então, ao invés de retornar uma mensagem de erro ou um nulo ou algo parecido, a linha simplesmente não foi retornado. Nós não estávamos tentando usá-lo em uma cláusula WHERE ou Cadastre-se, esta foi simplesmente parte da SELECT ... FROM VIEWNAME. Depois de analisar o ponto de vista, parecia que a visão erroneamente tinha detectado o comprimento da corda como 9 caracteres (sem comprimento foi especificado na definição), e RTrim simplesmente não funciona. Agora, eu poderia entender por que isso pode levar a uma mensagem de erro, ou um valor NULL no SELECT, mas por que a linha simplesmente não ser devolvidos em tudo ? Este não parece ser bom comportamento SQL e eu nunca vi isso acontecer com qualquer outro RDBMS.

Outras informações: Estamos teste de consulta via ODBC e WinSQL, com o objectivo de este ser incluído em um aplicativo ASP.NET existente. Não temos acesso ao backend, exceto através deste, embora nós ter direitos para criar pontos de vista.

Update: Como um follow-up estranho, descobrimos agora que se tenta consultar este ponto de vista, sem qualquer cláusula WHERE, há registros são retornados. Isso pode ter a mesma causa.

Foi útil?

Solução

Isso soa como ele poderia estar relacionado com o SQL-WIDTH dentro do banco de dados de progresso. Um problema com Progress é que se o conteúdo do campo excede o SQL-WIDTH então você vai ter comportamento SQL estranho (por vezes o condutor pode falhar, outras vezes você não obter nenhum resultado).

Para identificar isso, você precisa usar o comando dbtool para verificar SQL-WIDTH do que pode ser excedido.

Outras dicas

Certifique-se de que você não tem espaços em branco. Aparar não remove espaços em branco apenas espaços. Blanks também não são nulos. Há uma diferença no conjunto de caracteres enquanto não é visivelmente diferente em seu editor. Eu tenho que correr para isso com alguns bancos de dados, DBII, Oracle, PostgreSQL. Verifique o conjunto de caracteres do seu editor e tente visualizar as tabelas, que você pode ver nada, ou você pode ver grandes retângulos.

Isso soa como um comportamento muito estranho. código apenas em torno dele, fazer o acabamento e / ou a manipulação de cadeia na aplicação e ir em seu caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top