por q dá este erro

Firebird

28/01/2009

Por que o firebird retorna o erro abaixo quando executo uma instrução com union all no IBOCONSOLE?
count of column list and variable list do not match
Chega a listar o resultado mas dá erro na tela.
No delphi usando o tquery e não dá o erro...
Como segue um exemplo básico:
select campo1 from tabela1
union all
select campo1 from tabela1

É assim mesmo?
Uso o firebird 1.5


Briciosm

Briciosm

Curtidas 0

Respostas

Wilharlley

Wilharlley

28/01/2009

Meu amigo! Seria melhor se você colocasse o seu código para podermos analisar mais detalhadamente. Mas, pela mensagem você está retornando um valor para um número diferente de campos. Tem que ser a mesma quantidade para ambos.


GOSTEI 0
Gentil Fachi

Gentil Fachi

28/01/2009

Também estou com esse problema.

Alterei o Client Dialect para 3 e o erro persiste.
Quanto a Cast, tentei de todo tipo e em todos os campos, e o erro também persiste.

Sem o Cast:
select 1 as campo1, A.campo2 from Tabela1 A
Union
select 2 as campo2, B.campo2 from Tabela1 B

Com o Cast:
select Cast('1' as Numeric) as campo1, Cast(A.campo2 as Varchar(1)) as Campo2 from Tabela1 A
Union
select Cast('2' as Numeric) as campo2, Cast(B.campo2 as Varchar(1)) as Campo2 from Tabela1 B

E o erro é o mesmo: 'Invalid command count of column list and variable list do not match'

Alguém tem alguma idéia do que seja isso?
GOSTEI 0
Wilson Junior

Wilson Junior

28/01/2009

As colunas devem ter o mesmo alias
select
  Cast('1' as Numeric) as campo1,
  Cast(A.campo2 as Varchar(1)) as Campo2
from
  Tabela1 A

Union

select
  Cast('2' as Numeric) as campo2, /* aqui deve ser campo1*/
  Cast(B.campo2 as Varchar(1)) as Campo2
from
  Tabela1 B


Espero ter colaborado.
GOSTEI 0
Gentil Fachi

Gentil Fachi

28/01/2009

Também estou com esse problema.

Alterei o Client Dialect para 3 e o erro persiste.
Quanto a Cast, tentei de todo tipo e em todos os campos, e o erro também persiste.

Sem o Cast:
select 1 as campo1, A.campo2 from Tabela1 A
Union
select 2 as campo1, B.campo2 from Tabela1 B

Com o Cast:
select Cast('1' as Numeric) as campo1, Cast(A.campo2 as Varchar(1)) as Campo2 from Tabela1 A
Union
select Cast('2' as Numeric) as campo1, Cast(B.campo2 as Varchar(1)) as Campo2 from Tabela1 B

E o erro é o mesmo: 'Invalid command count of column list and variable list do not match'

Alguém tem alguma idéia do que seja isso?
GOSTEI 0
Gentil Fachi

Gentil Fachi

28/01/2009

Desculpe-me, escrevi errado na hora de colocar no fórum.
O erro acontece mesmo com as colunas corretas.

Com Cast e sem Cast.

Segue Código:

select 1 as campo1, A.campo2 from Tabela1 A
Union
select 2 as campo1, B.campo2 from Tabela1 B

Agradeço pela ajuda.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/01/2009

isso por acaso é um for select ?


se é, você precisa ter o mesmo número de variáveis para receber os dados.

por exemplo:

for
  select 1, A.campo2 from Tabela1 A
  union all
  select 2, B.campo2 from Tabela1 B
into :vcampo1, :vcampo2
como há dois campos, deve-se indicar duas variáveis para receber os valores.


for
  select A.campo2 from Tabela1 A
  union all
  select B.campo2 from Tabela1 B
into :vcampo
como há 1 campo, deve-se indicar 1 variável para receber o valor.

GOSTEI 0
Ricardo Araujo

Ricardo Araujo

28/01/2009


bom dia,

  Caro Colega, da uma olhada neste,
           link :http://www.linhadecodigo.com.br/artigo/945/SQL-Utilizando-o-Operador-UNION-e-UNION-ALL.aspx


  neste link tem  uns exemplo legal.


  Espero te ajudando.

GOSTEI 0
POSTAR