Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2010
FlacoNet FlacoNet is offline
Miembro
 
Registrado: jun 2003
Posts: 38
Poder: 0
FlacoNet Va por buen camino
Question UNION ALL cambia tipo de dato de retorno

buen dia. Tengo la siguiente estructura de tabla en postgres 8.2:

Código:
CREATE TABLE tiposcliente
(
  idtipoclient smallint NOT NULL,
  tipoclient character varying(30) NOT NULL,
  CONSTRAINT pk_tiposcliente PRIMARY KEY (idtipoclient)
)
y realizando la siguiente consulta:

Código:
select cast(0 as smallint) as idtipoclient,
cast('Todos' as varchar(30)) as tipoclient
UNION ALL
(SELECT idtipoclient, tipoclient
  FROM tiposcliente
order by 2)
Tengo el problema que el campo tipoclient me sigue devolviendo un campo de tipo varchar sin limite ó memo, cuando en realidad lo estoy convirtiendo a varchar(30) como la definicion del campo original.

Devolviendome el campo como 'memo' tengo problemas para mostrarlo en el componente de datos de delphi.
¿Alguna respuesta para resolver el correcto retorno del tipo de dato?

Acabo de probar creando una vista con la misma definicion anterior:

Código:
CREATE VIEW TipoCliente as
select cast(0 as smallint) as idtipoclient,
cast('Todos' as varchar(30)) as tipoclient
UNION ALL
(SELECT idtipoclient, tipoclient
  FROM tiposcliente
order by 2)
y cuando la consulta anda bien. ¿que pasara? Acaso no se puede hacer esto evitando crear la vista?

lo unico que encontre de documentacion al respecto es
http://www.postgresql.org/docs/8.3/s...nion-case.html pero sigo sin poder resolverlo.

Mil gracias a todos..

FlacoNet

Última edición por FlacoNet fecha: 14-02-2010 a las 00:34:24. Razón: Por que creando una vista devuelve el tipo de dato correcto
Responder Con Cita
  #2  
Antiguo 14-02-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
yo tomé el codigo de tu post sin cambiarle nada y ami no me genera el error que comentas...

aún así podrias recalcar el tipo de dato a la salida...

Código SQL [-]
select
  cast(0 as smallint) as idtipoclient,
  cast('Todos' as varchar(30)) as tipoclient
UNION ALL
SELECT
  idtipoclient::SMALLINT,
  tipoclient::VARCHAR(30)
FROM tiposcliente
order by idtipoclient;

por lo de la vista... mejor... para eso son las vistas... nos evitamos consultas tan largas dentro del programa.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 15-02-2010
FlacoNet FlacoNet is offline
Miembro
 
Registrado: jun 2003
Posts: 38
Poder: 0
FlacoNet Va por buen camino
Unhappy

Gracias Movorack por tu respuesta.

No es un error en realidad lo que sucede. solo que devuelve un tipo de dato que no es el del campo original ni el que le pido al escribir ::varchar(30) en el select.

Utilizando el Pgadmin al correr la siguiente consulta:
Código:
SELECT idtipoclient, tipoclient
  FROM tiposcliente
Me devuelve claramente smallint y varchar(30). A estos tipos de datos los veo en el titulo de las columnas devueltas por el pgadmin.

El mismo tipo de dato me devuelve cuando uso la vista, es decir OK, pero cuando ejecuto la consulta con union:
Código:
select
  cast(0 as smallint) as idtipoclient,
  cast('Todos' as varchar(30)) as tipoclient
UNION ALL
SELECT
  idtipoclient::SMALLINT,
  tipoclient::VARCHAR(30)
FROM tiposcliente
order by idtipoclient;
...el tipo de dato devuelto en las columnas es el que sigue:
smallint y varchar. Y no especifica que sea varchar(30), por lo tanto se trata de un campo MEMO.

Espero se entienda y muchas gracias por tu tiempo

Esteban
Responder Con Cita
  #4  
Antiguo 15-02-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
yo tambien usé el pgadmin para las pruebas e hice los mismos pasos que vos. y al ejecutar el SQL del UNION me devolvió VARCHAR(30)...
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 16-02-2010
FlacoNet FlacoNet is offline
Miembro
 
Registrado: jun 2003
Posts: 38
Poder: 0
FlacoNet Va por buen camino
Thumbs up Resuelto

Que raro. Viendo los resultados que vos tuviste no me quedó otra opcion que instalar la version nueva de postgres para windows, de la 8.2 que tenia a la 8.4.2-1. Haciendo esto ya me devuelve correctamente el tipo de dato solicitado en el select

Saludos y muchas gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
tipo de dato arnedokpo Conexión con bases de datos 1 14-07-2008 16:37:06
Tipo de Dato BetoAlonso Varios 11 09-12-2007 00:30:01
se cambia el tipo de letra Patricio Impresión 8 02-11-2007 15:49:16
No cambia el tipo de papel ElDioni Impresión 0 28-11-2005 17:45:16
Unión con diferentes tipos de dato Kafu Firebird e Interbase 2 09-02-2004 13:20:45


La franja horaria es GMT +2. Ahora son las 12:12:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi