Re: Problema con Tipos Compuestos

From: "Fernando Aguada" <fernandoaguada(at)yahoo(dot)com(dot)ar>
To: <pgsql-es-ayuda(at)postgresql(dot)org>, "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>
Subject: Re: Problema con Tipos Compuestos
Date: 2005-01-28 11:28:59
Message-ID: 004101c5052c$914e60e0$fb00a8c0@fernandoa
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, te mando la definicion de la tablas base y del tipo compuesto y por
ultimo la funcion,
fijate que el campo cletra de totalven es de longitud 1, pero cuando la
funcion hace el select
sobre el totalven y lo deposita en el tipo "planicaj", me lo guarda con una
longitud de 254.

Tabla totalven

CREATE TABLE totalven
(
ciden serial NOT NULL,
cfecha date NOT NULL DEFAULT '1900-01-01'::date,
ccaja date NOT NULL DEFAULT '1900-01-01'::date,
cdeno varchar(40) NOT NULL DEFAULT ''::character varying,
cdomi varchar(40) NOT NULL DEFAULT ''::character varying,
cloca varchar(30) NOT NULL DEFAULT ''::character varying,
ccond numeric(1) NOT NULL DEFAULT 0,
ccuit varchar(13) NOT NULL DEFAULT ''::character varying,
cdgr varchar(13) NOT NULL DEFAULT ''::character varying,
cimpu numeric(1) NOT NULL DEFAULT 0,
ccoca numeric(1) NOT NULL DEFAULT 0,
cletra varchar(1) NOT NULL DEFAULT ''::character varying,
cbase numeric(12,2) NOT NULL DEFAULT 0,
cbasea numeric(12,2) NOT NULL DEFAULT 0,
cbaseb numeric(12,2) NOT NULL DEFAULT 0,
civa1 numeric(12,2) NOT NULL DEFAULT 0,
civa1a numeric(12,2) NOT NULL DEFAULT 0,
civa1b numeric(12,2) NOT NULL DEFAULT 0,
civa2 numeric(12,2) NOT NULL DEFAULT 0,
civa2a numeric(12,2) NOT NULL DEFAULT 0,
civa2b numeric(12,2) NOT NULL DEFAULT 0,
cexento numeric(12,2) NOT NULL DEFAULT 0,
cneto numeric(12,2) NOT NULL DEFAULT 0,
cconce varchar(40) NOT NULL DEFAULT ''::character varying,
cimpefv numeric(12,2) NOT NULL DEFAULT 0,
cimpcht numeric(12,2) NOT NULL DEFAULT 0,
cimptic numeric(12,2) NOT NULL DEFAULT 0,
cimptar numeric(12,2) NOT NULL DEFAULT 0,
cctacte numeric(1) NOT NULL DEFAULT 0,
cbuso numeric(1) NOT NULL DEFAULT 0,
ctinu numeric(1) NOT NULL DEFAULT 0,
cren numeric(1) NOT NULL DEFAULT 0,
cimp numeric(1) NOT NULL DEFAULT 0,
ctipo int2 NOT NULL DEFAULT 0,
csucur int2 NOT NULL DEFAULT 0,
cnumcomp int4 NOT NULL DEFAULT 0,
cmodo int2 NOT NULL DEFAULT 0,
cnumtra int4 NOT NULL DEFAULT 0,
cimpotr numeric(12,2) NOT NULL DEFAULT 0,
ctipc int2 NOT NULL DEFAULT 0,
ccuen int4 NOT NULL DEFAULT 0,
csaldo numeric(12,2) NOT NULL DEFAULT 0,
cimpret numeric(12,2) NOT NULL DEFAULT 0
)
WITHOUT OIDS;
ALTER TABLE totalven OWNER TO postgres;
GRANT ALL ON TABLE totalven TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE totalven TO GROUP operadores;

La definicion del tipo

CREATE TYPE planicaj AS
(cori int2,
ctipo int2,
cabre varchar,
cletra varchar,
csucur int2,
cnumcomp int4,
cimpu int2,
cimpefv numeric,
cimpcht numeric,
cimptic numeric,
cimptar numeric,
cimpotr numeric,
cimpret numeric,
cconce varchar);
ALTER TYPE planicaj OWNER TO postgres;

La Funcion en cuestion

declare rplacaj planicaj%ROWTYPE;
declare rparaco paracomp%ROWTYPE;

begin
select * into rparaco from paracomp;

for rplacaj in select 1 as cori,ctipo,tipocomp.cabre,cletra,csucur,cnumcomp,

totalven.cimpu,cimpefv,cimpcht,cimptic,cimptar,cimpotr,cimpret,cconce
from totalven
left join tipocomp on totalven.ctipo=tipocomp.cnume
where ccaja=pfecha and cmodo=2 and cneto<>0 and
(totalven.cctacte=1 OR totalven.cctacte=2 AND
totalven.ctipo=rparaco.ctrecve)
loop
rplacaj.cletra:=cast(rplacaj.cletra varchar 3);
return next rplacaj;

end loop;
return;
end

----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>
To: "Fernando Aguada" <fernandoaguada(at)yahoo(dot)com(dot)ar>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Thursday, January 27, 2005 8:53 PM
Subject: Re: [pgsql-es-ayuda] Problema con Tipos Compuestos

> On Thu, Jan 27, 2005 at 08:29:46PM -0300, Fernando Aguada wrote:
>
> Hola,
>
> > Se me plantea el sig. problema, cree un tipo compuesto, que utilizo en
una funcion
> > y funciona, salvo por el hecho de que los campos de tipo varchar me los
> > devuelve con una longitud de 254 !!!, mientras que cuando defini el
tipo,
> > declare los campos varchar de una longitud determinada por ejemplo
1,3,40, etc.
> > Ademas los campos varchar de la tabla de la cual hago el select, tambien
estan bien.
> >
> > la funcion en cuestion es la siguiente:
> >
> > declare rplacaj planicaj%ROWTYPE;
> > declare rparaco paracomp%ROWTYPE;
>
> hum, que tal un ejemplo completo, con las definiciones de las tablas?
> Soy muy flojo para estar aplicando ingenieria reversa ...
>
> --
> Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
> "Java is clearly an example of a money oriented programming" (A.
Stepanov)
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 9: el optimizador ignorará el uso de recorridos de índice si los
> tipos de datos de las columnas no coinciden

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Roberto Cesar Najera 2005-01-28 11:45:23 Respaldo / replicacion
Previous Message Tomas Eroles i Forner 2005-01-28 09:41:32 Busco un manual